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

parse.c

Go to the documentation of this file.
00001 /* A Bison parser, made by GNU Bison 2.4.2.  */
00002 
00003 /* Skeleton implementation for Bison's Yacc-like parsers in C
00004    
00005       Copyright (C) 1984, 1989-1990, 2000-2006, 2009-2010 Free Software
00006    Foundation, Inc.
00007    
00008    This program is free software: you can redistribute it and/or modify
00009    it under the terms of the GNU General Public License as published by
00010    the Free Software Foundation, either version 3 of the License, or
00011    (at your option) any later version.
00012    
00013    This program is distributed in the hope that it will be useful,
00014    but WITHOUT ANY WARRANTY; without even the implied warranty of
00015    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00016    GNU General Public License for more details.
00017    
00018    You should have received a copy of the GNU General Public License
00019    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
00020 
00021 /* As a special exception, you may create a larger work that contains
00022    part or all of the Bison parser skeleton and distribute that work
00023    under terms of your choice, so long as that work isn't itself a
00024    parser generator using the skeleton or a modified version thereof
00025    as a parser skeleton.  Alternatively, if you modify or redistribute
00026    the parser skeleton itself, you may (at your option) remove this
00027    special exception, which will cause the skeleton and the resulting
00028    Bison output files to be licensed under the GNU General Public
00029    License without this special exception.
00030    
00031    This special exception was added by the Free Software Foundation in
00032    version 2.2 of Bison.  */
00033 
00034 /* C LALR(1) parser skeleton written by Richard Stallman, by
00035    simplifying the original so-called "semantic" parser.  */
00036 
00037 /* All symbols defined below should begin with yy or YY, to avoid
00038    infringing on user name space.  This should be done even for local
00039    variables, as they might otherwise be expanded by user macros.
00040    There are some unavoidable exceptions within include files to
00041    define necessary library symbols; they are noted "INFRINGES ON
00042    USER NAME SPACE" below.  */
00043 
00044 /* Identify Bison output.  */
00045 #define YYBISON 1
00046 
00047 /* Bison version.  */
00048 #define YYBISON_VERSION "2.4.2"
00049 
00050 /* Skeleton name.  */
00051 #define YYSKELETON_NAME "yacc.c"
00052 
00053 /* Pure parsers.  */
00054 #define YYPURE 1
00055 
00056 /* Push parsers.  */
00057 #define YYPUSH 0
00058 
00059 /* Pull parsers.  */
00060 #define YYPULL 1
00061 
00062 /* Using locations.  */
00063 #define YYLSP_NEEDED 0
00064 
00065 
00066 
00067 /* Copy the first part of user declarations.  */
00068 
00069 /* Line 189 of yacc.c  */
00070 #line 12 "parse.y"
00071 
00072 
00073 #define YYDEBUG 1
00074 #define YYERROR_VERBOSE 1
00075 #define YYSTACK_USE_ALLOCA 0
00076 
00077 #include "ruby/ruby.h"
00078 #include "ruby/st.h"
00079 #include "ruby/encoding.h"
00080 #include "node.h"
00081 #include "parse.h"
00082 #include "id.h"
00083 #include "regenc.h"
00084 #include <stdio.h>
00085 #include <errno.h>
00086 #include <ctype.h>
00087 
00088 #define numberof(array) (int)(sizeof(array) / sizeof((array)[0]))
00089 
00090 #define YYMALLOC(size)          rb_parser_malloc(parser, size)
00091 #define YYREALLOC(ptr, size)    rb_parser_realloc(parser, ptr, size)
00092 #define YYCALLOC(nelem, size)   rb_parser_calloc(parser, nelem, size)
00093 #define YYFREE(ptr)             rb_parser_free(parser, ptr)
00094 #define malloc  YYMALLOC
00095 #define realloc YYREALLOC
00096 #define calloc  YYCALLOC
00097 #define free    YYFREE
00098 
00099 #ifndef RIPPER
00100 static ID register_symid(ID, const char *, long, rb_encoding *);
00101 #define REGISTER_SYMID(id, name) register_symid(id, name, strlen(name), enc)
00102 #include "id.c"
00103 #endif
00104 
00105 #define is_notop_id(id) ((id)>tLAST_TOKEN)
00106 #define is_local_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_LOCAL)
00107 #define is_global_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_GLOBAL)
00108 #define is_instance_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_INSTANCE)
00109 #define is_attrset_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_ATTRSET)
00110 #define is_const_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_CONST)
00111 #define is_class_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_CLASS)
00112 #define is_junk_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_JUNK)
00113 
00114 #define is_asgn_or_id(id) ((is_notop_id(id)) && \
00115         (((id)&ID_SCOPE_MASK) == ID_GLOBAL || \
00116          ((id)&ID_SCOPE_MASK) == ID_INSTANCE || \
00117          ((id)&ID_SCOPE_MASK) == ID_CLASS))
00118 
00119 enum lex_state_e {
00120     EXPR_BEG,                   /* ignore newline, +/- is a sign. */
00121     EXPR_END,                   /* newline significant, +/- is an operator. */
00122     EXPR_ENDARG,                /* ditto, and unbound braces. */
00123     EXPR_ENDFN,                 /* ditto, and unbound braces. */
00124     EXPR_ARG,                   /* newline significant, +/- is an operator. */
00125     EXPR_CMDARG,                /* newline significant, +/- is an operator. */
00126     EXPR_MID,                   /* newline significant, +/- is an operator. */
00127     EXPR_FNAME,                 /* ignore newline, no reserved words. */
00128     EXPR_DOT,                   /* right after `.' or `::', no reserved words. */
00129     EXPR_CLASS,                 /* immediate after `class', no here document. */
00130     EXPR_VALUE,                 /* alike EXPR_BEG but label is disallowed. */
00131     EXPR_MAX_STATE
00132 };
00133 
00134 typedef VALUE stack_type;
00135 
00136 # define BITSTACK_PUSH(stack, n)        (stack = (stack<<1)|((n)&1))
00137 # define BITSTACK_POP(stack)    (stack = stack >> 1)
00138 # define BITSTACK_LEXPOP(stack) (stack = (stack >> 1) | (stack & 1))
00139 # define BITSTACK_SET_P(stack)  (stack&1)
00140 
00141 #define COND_PUSH(n)    BITSTACK_PUSH(cond_stack, n)
00142 #define COND_POP()      BITSTACK_POP(cond_stack)
00143 #define COND_LEXPOP()   BITSTACK_LEXPOP(cond_stack)
00144 #define COND_P()        BITSTACK_SET_P(cond_stack)
00145 
00146 #define CMDARG_PUSH(n)  BITSTACK_PUSH(cmdarg_stack, n)
00147 #define CMDARG_POP()    BITSTACK_POP(cmdarg_stack)
00148 #define CMDARG_LEXPOP() BITSTACK_LEXPOP(cmdarg_stack)
00149 #define CMDARG_P()      BITSTACK_SET_P(cmdarg_stack)
00150 
00151 struct vtable {
00152     ID *tbl;
00153     int pos;
00154     int capa;
00155     struct vtable *prev;
00156 };
00157 
00158 struct local_vars {
00159     struct vtable *args;
00160     struct vtable *vars;
00161     struct local_vars *prev;
00162 };
00163 
00164 #define DVARS_INHERIT ((void*)1)
00165 #define DVARS_TOPSCOPE NULL
00166 #define DVARS_SPECIAL_P(tbl) (!POINTER_P(tbl))
00167 #define POINTER_P(val) ((VALUE)(val) & ~(VALUE)3)
00168 
00169 static int
00170 vtable_size(const struct vtable *tbl)
00171 {
00172     if (POINTER_P(tbl)) {
00173         return tbl->pos;
00174     }
00175     else {
00176         return 0;
00177     }
00178 }
00179 
00180 #define VTBL_DEBUG 0
00181 
00182 static struct vtable *
00183 vtable_alloc(struct vtable *prev)
00184 {
00185     struct vtable *tbl = ALLOC(struct vtable);
00186     tbl->pos = 0;
00187     tbl->capa = 8;
00188     tbl->tbl = ALLOC_N(ID, tbl->capa);
00189     tbl->prev = prev;
00190     if (VTBL_DEBUG) printf("vtable_alloc: %p\n", (void *)tbl);
00191     return tbl;
00192 }
00193 
00194 static void
00195 vtable_free(struct vtable *tbl)
00196 {
00197     if (VTBL_DEBUG)printf("vtable_free: %p\n", (void *)tbl);
00198     if (POINTER_P(tbl)) {
00199         if (tbl->tbl) {
00200             xfree(tbl->tbl);
00201         }
00202         xfree(tbl);
00203     }
00204 }
00205 
00206 static void
00207 vtable_add(struct vtable *tbl, ID id)
00208 {
00209     if (!POINTER_P(tbl)) {
00210         rb_bug("vtable_add: vtable is not allocated (%p)", (void *)tbl);
00211     }
00212     if (VTBL_DEBUG) printf("vtable_add: %p, %s\n", (void *)tbl, rb_id2name(id));
00213 
00214     if (tbl->pos == tbl->capa) {
00215         tbl->capa = tbl->capa * 2;
00216         REALLOC_N(tbl->tbl, ID, tbl->capa);
00217     }
00218     tbl->tbl[tbl->pos++] = id;
00219 }
00220 
00221 static int
00222 vtable_included(const struct vtable * tbl, ID id)
00223 {
00224     int i;
00225 
00226     if (POINTER_P(tbl)) {
00227         for (i = 0; i < tbl->pos; i++) {
00228             if (tbl->tbl[i] == id) {
00229                 return 1;
00230             }
00231         }
00232     }
00233     return 0;
00234 }
00235 
00236 
00237 #ifndef RIPPER
00238 typedef struct token_info {
00239     const char *token;
00240     int linenum;
00241     int column;
00242     int nonspc;
00243     struct token_info *next;
00244 } token_info;
00245 #endif
00246 
00247 /*
00248     Structure of Lexer Buffer:
00249 
00250  lex_pbeg      tokp         lex_p        lex_pend
00251     |           |              |            |
00252     |-----------+--------------+------------|
00253                 |<------------>|
00254                      token
00255 */
00256 struct parser_params {
00257     int is_ripper;
00258     NODE *heap;
00259 
00260     YYSTYPE *parser_yylval;
00261     VALUE eofp;
00262 
00263     NODE *parser_lex_strterm;
00264     enum lex_state_e parser_lex_state;
00265     stack_type parser_cond_stack;
00266     stack_type parser_cmdarg_stack;
00267     int parser_class_nest;
00268     int parser_paren_nest;
00269     int parser_lpar_beg;
00270     int parser_in_single;
00271     int parser_in_def;
00272     int parser_compile_for_eval;
00273     VALUE parser_cur_mid;
00274     int parser_in_defined;
00275     char *parser_tokenbuf;
00276     int parser_tokidx;
00277     int parser_toksiz;
00278     VALUE parser_lex_input;
00279     VALUE parser_lex_lastline;
00280     VALUE parser_lex_nextline;
00281     const char *parser_lex_pbeg;
00282     const char *parser_lex_p;
00283     const char *parser_lex_pend;
00284     int parser_heredoc_end;
00285     int parser_command_start;
00286     NODE *parser_deferred_nodes;
00287     long parser_lex_gets_ptr;
00288     VALUE (*parser_lex_gets)(struct parser_params*,VALUE);
00289     struct local_vars *parser_lvtbl;
00290     int parser_ruby__end__seen;
00291     int line_count;
00292     int has_shebang;
00293     char *parser_ruby_sourcefile; /* current source file */
00294     int parser_ruby_sourceline; /* current line no. */
00295     rb_encoding *enc;
00296     rb_encoding *utf8;
00297 
00298     int parser_yydebug;
00299 
00300 #ifndef RIPPER
00301     /* Ruby core only */
00302     NODE *parser_eval_tree_begin;
00303     NODE *parser_eval_tree;
00304     VALUE debug_lines;
00305     VALUE coverage;
00306     int nerr;
00307 
00308     token_info *parser_token_info;
00309 #else
00310     /* Ripper only */
00311     VALUE parser_ruby_sourcefile_string;
00312     const char *tokp;
00313     VALUE delayed;
00314     int delayed_line;
00315     int delayed_col;
00316 
00317     VALUE value;
00318     VALUE result;
00319     VALUE parsing_thread;
00320     int toplevel_p;
00321 #endif
00322 };
00323 
00324 #define UTF8_ENC() (parser->utf8 ? parser->utf8 : \
00325                     (parser->utf8 = rb_utf8_encoding()))
00326 #define STR_NEW(p,n) rb_enc_str_new((p),(n),parser->enc)
00327 #define STR_NEW0() rb_enc_str_new(0,0,parser->enc)
00328 #define STR_NEW2(p) rb_enc_str_new((p),strlen(p),parser->enc)
00329 #define STR_NEW3(p,n,e,func) parser_str_new((p),(n),(e),(func),parser->enc)
00330 #define ENC_SINGLE(cr) ((cr)==ENC_CODERANGE_7BIT)
00331 #define TOK_INTERN(mb) rb_intern3(tok(), toklen(), parser->enc)
00332 
00333 #ifdef YYMALLOC
00334 void *rb_parser_malloc(struct parser_params *, size_t);
00335 void *rb_parser_realloc(struct parser_params *, void *, size_t);
00336 void *rb_parser_calloc(struct parser_params *, size_t, size_t);
00337 void rb_parser_free(struct parser_params *, void *);
00338 #endif
00339 
00340 static int parser_yyerror(struct parser_params*, const char*);
00341 #define yyerror(msg) parser_yyerror(parser, msg)
00342 
00343 #define YYLEX_PARAM parser
00344 
00345 #define lex_strterm             (parser->parser_lex_strterm)
00346 #define lex_state               (parser->parser_lex_state)
00347 #define cond_stack              (parser->parser_cond_stack)
00348 #define cmdarg_stack            (parser->parser_cmdarg_stack)
00349 #define class_nest              (parser->parser_class_nest)
00350 #define paren_nest              (parser->parser_paren_nest)
00351 #define lpar_beg                (parser->parser_lpar_beg)
00352 #define in_single               (parser->parser_in_single)
00353 #define in_def                  (parser->parser_in_def)
00354 #define compile_for_eval        (parser->parser_compile_for_eval)
00355 #define cur_mid                 (parser->parser_cur_mid)
00356 #define in_defined              (parser->parser_in_defined)
00357 #define tokenbuf                (parser->parser_tokenbuf)
00358 #define tokidx                  (parser->parser_tokidx)
00359 #define toksiz                  (parser->parser_toksiz)
00360 #define lex_input               (parser->parser_lex_input)
00361 #define lex_lastline            (parser->parser_lex_lastline)
00362 #define lex_nextline            (parser->parser_lex_nextline)
00363 #define lex_pbeg                (parser->parser_lex_pbeg)
00364 #define lex_p                   (parser->parser_lex_p)
00365 #define lex_pend                (parser->parser_lex_pend)
00366 #define heredoc_end             (parser->parser_heredoc_end)
00367 #define command_start           (parser->parser_command_start)
00368 #define deferred_nodes          (parser->parser_deferred_nodes)
00369 #define lex_gets_ptr            (parser->parser_lex_gets_ptr)
00370 #define lex_gets                (parser->parser_lex_gets)
00371 #define lvtbl                   (parser->parser_lvtbl)
00372 #define ruby__end__seen         (parser->parser_ruby__end__seen)
00373 #define ruby_sourceline         (parser->parser_ruby_sourceline)
00374 #define ruby_sourcefile         (parser->parser_ruby_sourcefile)
00375 #define yydebug                 (parser->parser_yydebug)
00376 #ifdef RIPPER
00377 #else
00378 #define ruby_eval_tree          (parser->parser_eval_tree)
00379 #define ruby_eval_tree_begin    (parser->parser_eval_tree_begin)
00380 #define ruby_debug_lines        (parser->debug_lines)
00381 #define ruby_coverage           (parser->coverage)
00382 #endif
00383 
00384 static int yylex(void*, void*);
00385 
00386 #ifndef RIPPER
00387 #define yyparse ruby_yyparse
00388 
00389 static NODE* node_newnode(struct parser_params *, enum node_type, VALUE, VALUE, VALUE);
00390 #define rb_node_newnode(type, a1, a2, a3) node_newnode(parser, type, a1, a2, a3)
00391 
00392 static NODE *cond_gen(struct parser_params*,NODE*);
00393 #define cond(node) cond_gen(parser, node)
00394 static NODE *logop_gen(struct parser_params*,enum node_type,NODE*,NODE*);
00395 #define logop(type,node1,node2) logop_gen(parser, type, node1, node2)
00396 
00397 static NODE *newline_node(NODE*);
00398 static void fixpos(NODE*,NODE*);
00399 
00400 static int value_expr_gen(struct parser_params*,NODE*);
00401 static void void_expr_gen(struct parser_params*,NODE*);
00402 static NODE *remove_begin(NODE*);
00403 #define value_expr(node) value_expr_gen(parser, (node) = remove_begin(node))
00404 #define void_expr0(node) void_expr_gen(parser, (node))
00405 #define void_expr(node) void_expr0((node) = remove_begin(node))
00406 static void void_stmts_gen(struct parser_params*,NODE*);
00407 #define void_stmts(node) void_stmts_gen(parser, node)
00408 static void reduce_nodes_gen(struct parser_params*,NODE**);
00409 #define reduce_nodes(n) reduce_nodes_gen(parser,n)
00410 static void block_dup_check_gen(struct parser_params*,NODE*,NODE*);
00411 #define block_dup_check(n1,n2) block_dup_check_gen(parser,n1,n2)
00412 
00413 static NODE *block_append_gen(struct parser_params*,NODE*,NODE*);
00414 #define block_append(h,t) block_append_gen(parser,h,t)
00415 static NODE *list_append_gen(struct parser_params*,NODE*,NODE*);
00416 #define list_append(l,i) list_append_gen(parser,l,i)
00417 static NODE *list_concat_gen(struct parser_params*,NODE*,NODE*);
00418 #define list_concat(h,t) list_concat_gen(parser,h,t)
00419 static NODE *arg_append_gen(struct parser_params*,NODE*,NODE*);
00420 #define arg_append(h,t) arg_append_gen(parser,h,t)
00421 static NODE *arg_concat_gen(struct parser_params*,NODE*,NODE*);
00422 #define arg_concat(h,t) arg_concat_gen(parser,h,t)
00423 static NODE *literal_concat_gen(struct parser_params*,NODE*,NODE*);
00424 #define literal_concat(h,t) literal_concat_gen(parser,h,t)
00425 static int literal_concat0(struct parser_params *, VALUE, VALUE);
00426 static NODE *new_evstr_gen(struct parser_params*,NODE*);
00427 #define new_evstr(n) new_evstr_gen(parser,n)
00428 static NODE *evstr2dstr_gen(struct parser_params*,NODE*);
00429 #define evstr2dstr(n) evstr2dstr_gen(parser,n)
00430 static NODE *splat_array(NODE*);
00431 
00432 static NODE *call_bin_op_gen(struct parser_params*,NODE*,ID,NODE*);
00433 #define call_bin_op(recv,id,arg1) call_bin_op_gen(parser, recv,id,arg1)
00434 static NODE *call_uni_op_gen(struct parser_params*,NODE*,ID);
00435 #define call_uni_op(recv,id) call_uni_op_gen(parser, recv,id)
00436 
00437 static NODE *new_args_gen(struct parser_params*,NODE*,NODE*,ID,NODE*,ID);
00438 #define new_args(f,o,r,p,b) new_args_gen(parser, f,o,r,p,b)
00439 
00440 static NODE *negate_lit(NODE*);
00441 static NODE *ret_args_gen(struct parser_params*,NODE*);
00442 #define ret_args(node) ret_args_gen(parser, node)
00443 static NODE *arg_blk_pass(NODE*,NODE*);
00444 static NODE *new_yield_gen(struct parser_params*,NODE*);
00445 #define new_yield(node) new_yield_gen(parser, node)
00446 
00447 static NODE *gettable_gen(struct parser_params*,ID);
00448 #define gettable(id) gettable_gen(parser,id)
00449 static NODE *assignable_gen(struct parser_params*,ID,NODE*);
00450 #define assignable(id,node) assignable_gen(parser, id, node)
00451 
00452 static NODE *aryset_gen(struct parser_params*,NODE*,NODE*);
00453 #define aryset(node1,node2) aryset_gen(parser, node1, node2)
00454 static NODE *attrset_gen(struct parser_params*,NODE*,ID);
00455 #define attrset(node,id) attrset_gen(parser, node, id)
00456 
00457 static void rb_backref_error_gen(struct parser_params*,NODE*);
00458 #define rb_backref_error(n) rb_backref_error_gen(parser,n)
00459 static NODE *node_assign_gen(struct parser_params*,NODE*,NODE*);
00460 #define node_assign(node1, node2) node_assign_gen(parser, node1, node2)
00461 
00462 static NODE *match_op_gen(struct parser_params*,NODE*,NODE*);
00463 #define match_op(node1,node2) match_op_gen(parser, node1, node2)
00464 
00465 static ID  *local_tbl_gen(struct parser_params*);
00466 #define local_tbl() local_tbl_gen(parser)
00467 
00468 static void fixup_nodes(NODE **);
00469 
00470 extern int rb_dvar_defined(ID);
00471 extern int rb_local_defined(ID);
00472 extern int rb_parse_in_eval(void);
00473 extern int rb_parse_in_main(void);
00474 
00475 static VALUE reg_compile_gen(struct parser_params*, VALUE, int);
00476 #define reg_compile(str,options) reg_compile_gen(parser, str, options)
00477 static void reg_fragment_setenc_gen(struct parser_params*, VALUE, int);
00478 #define reg_fragment_setenc(str,options) reg_fragment_setenc_gen(parser, str, options)
00479 static int reg_fragment_check_gen(struct parser_params*, VALUE, int);
00480 #define reg_fragment_check(str,options) reg_fragment_check_gen(parser, str, options)
00481 static NODE *reg_named_capture_assign_gen(struct parser_params* parser, VALUE regexp, NODE *match);
00482 #define reg_named_capture_assign(regexp,match) reg_named_capture_assign_gen(parser,regexp,match)
00483 
00484 #define get_id(id) (id)
00485 #define get_value(val) (val)
00486 #else
00487 #define remove_begin(node) (node)
00488 #define rb_dvar_defined(id) 0
00489 #define rb_local_defined(id) 0
00490 static ID ripper_get_id(VALUE);
00491 #define get_id(id) ripper_get_id(id)
00492 static VALUE ripper_get_value(VALUE);
00493 #define get_value(val) ripper_get_value(val)
00494 static VALUE assignable_gen(struct parser_params*,VALUE);
00495 #define assignable(lhs,node) assignable_gen(parser, lhs)
00496 #endif /* !RIPPER */
00497 
00498 static ID formal_argument_gen(struct parser_params*, ID);
00499 #define formal_argument(id) formal_argument_gen(parser, id)
00500 static ID shadowing_lvar_gen(struct parser_params*,ID);
00501 #define shadowing_lvar(name) shadowing_lvar_gen(parser, name)
00502 static void new_bv_gen(struct parser_params*,ID);
00503 #define new_bv(id) new_bv_gen(parser, id)
00504 
00505 static void local_push_gen(struct parser_params*,int);
00506 #define local_push(top) local_push_gen(parser,top)
00507 static void local_pop_gen(struct parser_params*);
00508 #define local_pop() local_pop_gen(parser)
00509 static int local_var_gen(struct parser_params*, ID);
00510 #define local_var(id) local_var_gen(parser, id);
00511 static int arg_var_gen(struct parser_params*, ID);
00512 #define arg_var(id) arg_var_gen(parser, id)
00513 static int  local_id_gen(struct parser_params*, ID);
00514 #define local_id(id) local_id_gen(parser, id)
00515 static ID   internal_id_gen(struct parser_params*);
00516 #define internal_id() internal_id_gen(parser)
00517 
00518 static const struct vtable *dyna_push_gen(struct parser_params *);
00519 #define dyna_push() dyna_push_gen(parser)
00520 static void dyna_pop_gen(struct parser_params*, const struct vtable *);
00521 #define dyna_pop(node) dyna_pop_gen(parser, node)
00522 static int dyna_in_block_gen(struct parser_params*);
00523 #define dyna_in_block() dyna_in_block_gen(parser)
00524 #define dyna_var(id) local_var(id)
00525 static int dvar_defined_gen(struct parser_params*,ID);
00526 #define dvar_defined(id) dvar_defined_gen(parser, id)
00527 static int dvar_curr_gen(struct parser_params*,ID);
00528 #define dvar_curr(id) dvar_curr_gen(parser, id)
00529 
00530 static int lvar_defined_gen(struct parser_params*, ID);
00531 #define lvar_defined(id) lvar_defined_gen(parser, id)
00532 
00533 #define RE_OPTION_ONCE (1<<16)
00534 #define RE_OPTION_ENCODING_SHIFT 8
00535 #define RE_OPTION_ENCODING(e) (((e)&0xff)<<RE_OPTION_ENCODING_SHIFT)
00536 #define RE_OPTION_ENCODING_IDX(o) (((o)>>RE_OPTION_ENCODING_SHIFT)&0xff)
00537 #define RE_OPTION_ENCODING_NONE(o) ((o)&RE_OPTION_ARG_ENCODING_NONE)
00538 #define RE_OPTION_MASK  0xff
00539 #define RE_OPTION_ARG_ENCODING_NONE 32
00540 
00541 #define NODE_STRTERM NODE_ZARRAY        /* nothing to gc */
00542 #define NODE_HEREDOC NODE_ARRAY         /* 1, 3 to gc */
00543 #define SIGN_EXTEND(x,n) (((1<<(n)-1)^((x)&~(~0<<(n))))-(1<<(n)-1))
00544 #define nd_func u1.id
00545 #if SIZEOF_SHORT == 2
00546 #define nd_term(node) ((signed short)(node)->u2.id)
00547 #else
00548 #define nd_term(node) SIGN_EXTEND((node)->u2.id, CHAR_BIT*2)
00549 #endif
00550 #define nd_paren(node) (char)((node)->u2.id >> CHAR_BIT*2)
00551 #define nd_nest u3.cnt
00552 
00553 /****** Ripper *******/
00554 
00555 #ifdef RIPPER
00556 #define RIPPER_VERSION "0.1.0"
00557 
00558 #include "eventids1.c"
00559 #include "eventids2.c"
00560 static ID ripper_id_gets;
00561 
00562 static VALUE ripper_dispatch0(struct parser_params*,ID);
00563 static VALUE ripper_dispatch1(struct parser_params*,ID,VALUE);
00564 static VALUE ripper_dispatch2(struct parser_params*,ID,VALUE,VALUE);
00565 static VALUE ripper_dispatch3(struct parser_params*,ID,VALUE,VALUE,VALUE);
00566 static VALUE ripper_dispatch4(struct parser_params*,ID,VALUE,VALUE,VALUE,VALUE);
00567 static VALUE ripper_dispatch5(struct parser_params*,ID,VALUE,VALUE,VALUE,VALUE,VALUE);
00568 
00569 #define dispatch0(n)            ripper_dispatch0(parser, TOKEN_PASTE(ripper_id_, n))
00570 #define dispatch1(n,a)          ripper_dispatch1(parser, TOKEN_PASTE(ripper_id_, n), a)
00571 #define dispatch2(n,a,b)        ripper_dispatch2(parser, TOKEN_PASTE(ripper_id_, n), a, b)
00572 #define dispatch3(n,a,b,c)      ripper_dispatch3(parser, TOKEN_PASTE(ripper_id_, n), a, b, c)
00573 #define dispatch4(n,a,b,c,d)    ripper_dispatch4(parser, TOKEN_PASTE(ripper_id_, n), a, b, c, d)
00574 #define dispatch5(n,a,b,c,d,e)  ripper_dispatch5(parser, TOKEN_PASTE(ripper_id_, n), a, b, c, d, e)
00575 
00576 #define yyparse ripper_yyparse
00577 
00578 #define ripper_intern(s) ID2SYM(rb_intern(s))
00579 static VALUE ripper_id2sym(ID);
00580 #ifdef __GNUC__
00581 #define ripper_id2sym(id) ((id) < 256 && rb_ispunct(id) ? \
00582                            ID2SYM(id) : ripper_id2sym(id))
00583 #endif
00584 
00585 #define arg_new() dispatch0(args_new)
00586 #define arg_add(l,a) dispatch2(args_add, l, a)
00587 #define arg_add_star(l,a) dispatch2(args_add_star, l, a)
00588 #define arg_add_block(l,b) dispatch2(args_add_block, l, b)
00589 #define arg_add_optblock(l,b) ((b)==Qundef? l : dispatch2(args_add_block, l, b))
00590 #define bare_assoc(v) dispatch1(bare_assoc_hash, v)
00591 #define arg_add_assocs(l,b) arg_add(l, bare_assoc(b))
00592 
00593 #define args2mrhs(a) dispatch1(mrhs_new_from_args, a)
00594 #define mrhs_new() dispatch0(mrhs_new)
00595 #define mrhs_add(l,a) dispatch2(mrhs_add, l, a)
00596 #define mrhs_add_star(l,a) dispatch2(mrhs_add_star, l, a)
00597 
00598 #define mlhs_new() dispatch0(mlhs_new)
00599 #define mlhs_add(l,a) dispatch2(mlhs_add, l, a)
00600 #define mlhs_add_star(l,a) dispatch2(mlhs_add_star, l, a)
00601 
00602 #define params_new(pars, opts, rest, pars2, blk) \
00603         dispatch5(params, pars, opts, rest, pars2, blk)
00604 
00605 #define blockvar_new(p,v) dispatch2(block_var, p, v)
00606 #define blockvar_add_star(l,a) dispatch2(block_var_add_star, l, a)
00607 #define blockvar_add_block(l,a) dispatch2(block_var_add_block, l, a)
00608 
00609 #define method_optarg(m,a) ((a)==Qundef ? m : dispatch2(method_add_arg,m,a))
00610 #define method_arg(m,a) dispatch2(method_add_arg,m,a)
00611 #define method_add_block(m,b) dispatch2(method_add_block, m, b)
00612 
00613 #define escape_Qundef(x) ((x)==Qundef ? Qnil : (x))
00614 
00615 #define FIXME 0
00616 
00617 #endif /* RIPPER */
00618 
00619 #ifndef RIPPER
00620 # define ifndef_ripper(x) x
00621 #else
00622 # define ifndef_ripper(x)
00623 #endif
00624 
00625 #ifndef RIPPER
00626 # define rb_warn0(fmt)    rb_compile_warn(ruby_sourcefile, ruby_sourceline, fmt)
00627 # define rb_warnI(fmt,a)  rb_compile_warn(ruby_sourcefile, ruby_sourceline, fmt, a)
00628 # define rb_warnS(fmt,a)  rb_compile_warn(ruby_sourcefile, ruby_sourceline, fmt, a)
00629 # define rb_warning0(fmt) rb_compile_warning(ruby_sourcefile, ruby_sourceline, fmt)
00630 # define rb_warningS(fmt,a) rb_compile_warning(ruby_sourcefile, ruby_sourceline, fmt, a)
00631 #else
00632 # define rb_warn0(fmt)    ripper_warn0(parser, fmt)
00633 # define rb_warnI(fmt,a)  ripper_warnI(parser, fmt, a)
00634 # define rb_warnS(fmt,a)  ripper_warnS(parser, fmt, a)
00635 # define rb_warning0(fmt) ripper_warning0(parser, fmt)
00636 # define rb_warningS(fmt,a) ripper_warningS(parser, fmt, a)
00637 static void ripper_warn0(struct parser_params*, const char*);
00638 static void ripper_warnI(struct parser_params*, const char*, int);
00639 #if 0
00640 static void ripper_warnS(struct parser_params*, const char*, const char*);
00641 #endif
00642 static void ripper_warning0(struct parser_params*, const char*);
00643 static void ripper_warningS(struct parser_params*, const char*, const char*);
00644 #endif
00645 
00646 #ifdef RIPPER
00647 static void ripper_compile_error(struct parser_params*, const char *fmt, ...);
00648 # define rb_compile_error ripper_compile_error
00649 # define compile_error ripper_compile_error
00650 # define PARSER_ARG parser,
00651 #else
00652 # define compile_error parser->nerr++,rb_compile_error
00653 # define PARSER_ARG ruby_sourcefile, ruby_sourceline,
00654 #endif
00655 
00656 /* Older versions of Yacc set YYMAXDEPTH to a very low value by default (150,
00657    for instance).  This is too low for Ruby to parse some files, such as
00658    date/format.rb, therefore bump the value up to at least Bison's default. */
00659 #ifdef OLD_YACC
00660 #ifndef YYMAXDEPTH
00661 #define YYMAXDEPTH 10000
00662 #endif
00663 #endif
00664 
00665 #ifndef RIPPER
00666 static void token_info_push(struct parser_params*, const char *token);
00667 static void token_info_pop(struct parser_params*, const char *token);
00668 #define token_info_push(token) (RTEST(ruby_verbose) ? token_info_push(parser, token) : (void)0)
00669 #define token_info_pop(token) (RTEST(ruby_verbose) ? token_info_pop(parser, token) : (void)0)
00670 #else
00671 #define token_info_push(token) /* nothing */
00672 #define token_info_pop(token) /* nothing */
00673 #endif
00674 
00675 
00676 /* Line 189 of yacc.c  */
00677 #line 678 "parse.c"
00678 
00679 /* Enabling traces.  */
00680 #ifndef YYDEBUG
00681 # define YYDEBUG 0
00682 #endif
00683 
00684 /* Enabling verbose error messages.  */
00685 #ifdef YYERROR_VERBOSE
00686 # undef YYERROR_VERBOSE
00687 # define YYERROR_VERBOSE 1
00688 #else
00689 # define YYERROR_VERBOSE 0
00690 #endif
00691 
00692 /* Enabling the token table.  */
00693 #ifndef YYTOKEN_TABLE
00694 # define YYTOKEN_TABLE 0
00695 #endif
00696 
00697 
00698 /* Tokens.  */
00699 #ifndef YYTOKENTYPE
00700 # define YYTOKENTYPE
00701    /* Put the tokens into the symbol table, so that GDB and other debuggers
00702       know about them.  */
00703    enum yytokentype {
00704      keyword_class = 258,
00705      keyword_module = 259,
00706      keyword_def = 260,
00707      keyword_undef = 261,
00708      keyword_begin = 262,
00709      keyword_rescue = 263,
00710      keyword_ensure = 264,
00711      keyword_end = 265,
00712      keyword_if = 266,
00713      keyword_unless = 267,
00714      keyword_then = 268,
00715      keyword_elsif = 269,
00716      keyword_else = 270,
00717      keyword_case = 271,
00718      keyword_when = 272,
00719      keyword_while = 273,
00720      keyword_until = 274,
00721      keyword_for = 275,
00722      keyword_break = 276,
00723      keyword_next = 277,
00724      keyword_redo = 278,
00725      keyword_retry = 279,
00726      keyword_in = 280,
00727      keyword_do = 281,
00728      keyword_do_cond = 282,
00729      keyword_do_block = 283,
00730      keyword_do_LAMBDA = 284,
00731      keyword_return = 285,
00732      keyword_yield = 286,
00733      keyword_super = 287,
00734      keyword_self = 288,
00735      keyword_nil = 289,
00736      keyword_true = 290,
00737      keyword_false = 291,
00738      keyword_and = 292,
00739      keyword_or = 293,
00740      keyword_not = 294,
00741      modifier_if = 295,
00742      modifier_unless = 296,
00743      modifier_while = 297,
00744      modifier_until = 298,
00745      modifier_rescue = 299,
00746      keyword_alias = 300,
00747      keyword_defined = 301,
00748      keyword_BEGIN = 302,
00749      keyword_END = 303,
00750      keyword__LINE__ = 304,
00751      keyword__FILE__ = 305,
00752      keyword__ENCODING__ = 306,
00753      tIDENTIFIER = 307,
00754      tFID = 308,
00755      tGVAR = 309,
00756      tIVAR = 310,
00757      tCONSTANT = 311,
00758      tCVAR = 312,
00759      tLABEL = 313,
00760      tINTEGER = 314,
00761      tFLOAT = 315,
00762      tSTRING_CONTENT = 316,
00763      tCHAR = 317,
00764      tNTH_REF = 318,
00765      tBACK_REF = 319,
00766      tREGEXP_END = 320,
00767      tUPLUS = 321,
00768      tUMINUS = 322,
00769      tPOW = 323,
00770      tCMP = 324,
00771      tEQ = 325,
00772      tEQQ = 326,
00773      tNEQ = 327,
00774      tGEQ = 328,
00775      tLEQ = 329,
00776      tANDOP = 330,
00777      tOROP = 331,
00778      tMATCH = 332,
00779      tNMATCH = 333,
00780      tDOT2 = 334,
00781      tDOT3 = 335,
00782      tAREF = 336,
00783      tASET = 337,
00784      tLSHFT = 338,
00785      tRSHFT = 339,
00786      tCOLON2 = 340,
00787      tCOLON3 = 341,
00788      tOP_ASGN = 342,
00789      tASSOC = 343,
00790      tLPAREN = 344,
00791      tLPAREN_ARG = 345,
00792      tRPAREN = 346,
00793      tLBRACK = 347,
00794      tLBRACE = 348,
00795      tLBRACE_ARG = 349,
00796      tSTAR = 350,
00797      tAMPER = 351,
00798      tLAMBDA = 352,
00799      tSYMBEG = 353,
00800      tSTRING_BEG = 354,
00801      tXSTRING_BEG = 355,
00802      tREGEXP_BEG = 356,
00803      tWORDS_BEG = 357,
00804      tQWORDS_BEG = 358,
00805      tSTRING_DBEG = 359,
00806      tSTRING_DVAR = 360,
00807      tSTRING_END = 361,
00808      tLAMBEG = 362,
00809      tLOWEST = 363,
00810      tUMINUS_NUM = 364,
00811      idNULL = 365,
00812      idRespond_to = 366,
00813      idIFUNC = 367,
00814      idCFUNC = 368,
00815      id_core_set_method_alias = 369,
00816      id_core_set_variable_alias = 370,
00817      id_core_undef_method = 371,
00818      id_core_define_method = 372,
00819      id_core_define_singleton_method = 373,
00820      id_core_set_postexe = 374,
00821      tLAST_TOKEN = 375
00822    };
00823 #endif
00824 
00825 
00826 
00827 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
00828 typedef union YYSTYPE
00829 {
00830 
00831 /* Line 214 of yacc.c  */
00832 #line 620 "parse.y"
00833 
00834     VALUE val;
00835     NODE *node;
00836     ID id;
00837     int num;
00838     const struct vtable *vars;
00839 
00840 
00841 
00842 /* Line 214 of yacc.c  */
00843 #line 844 "parse.c"
00844 } YYSTYPE;
00845 # define YYSTYPE_IS_TRIVIAL 1
00846 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
00847 # define YYSTYPE_IS_DECLARED 1
00848 #endif
00849 
00850 
00851 /* Copy the second part of user declarations.  */
00852 
00853 
00854 /* Line 264 of yacc.c  */
00855 #line 856 "parse.c"
00856 
00857 #ifdef short
00858 # undef short
00859 #endif
00860 
00861 #ifdef YYTYPE_UINT8
00862 typedef YYTYPE_UINT8 yytype_uint8;
00863 #else
00864 typedef unsigned char yytype_uint8;
00865 #endif
00866 
00867 #ifdef YYTYPE_INT8
00868 typedef YYTYPE_INT8 yytype_int8;
00869 #elif (defined __STDC__ || defined __C99__FUNC__ \
00870      || defined __cplusplus || defined _MSC_VER)
00871 typedef signed char yytype_int8;
00872 #else
00873 typedef short int yytype_int8;
00874 #endif
00875 
00876 #ifdef YYTYPE_UINT16
00877 typedef YYTYPE_UINT16 yytype_uint16;
00878 #else
00879 typedef unsigned short int yytype_uint16;
00880 #endif
00881 
00882 #ifdef YYTYPE_INT16
00883 typedef YYTYPE_INT16 yytype_int16;
00884 #else
00885 typedef short int yytype_int16;
00886 #endif
00887 
00888 #ifndef YYSIZE_T
00889 # ifdef __SIZE_TYPE__
00890 #  define YYSIZE_T __SIZE_TYPE__
00891 # elif defined size_t
00892 #  define YYSIZE_T size_t
00893 # elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
00894      || defined __cplusplus || defined _MSC_VER)
00895 #  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
00896 #  define YYSIZE_T size_t
00897 # else
00898 #  define YYSIZE_T unsigned int
00899 # endif
00900 #endif
00901 
00902 #define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
00903 
00904 #ifndef YY_
00905 # if defined YYENABLE_NLS && YYENABLE_NLS
00906 #  if ENABLE_NLS
00907 #   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
00908 #   define YY_(msgid) dgettext ("bison-runtime", msgid)
00909 #  endif
00910 # endif
00911 # ifndef YY_
00912 #  define YY_(msgid) msgid
00913 # endif
00914 #endif
00915 
00916 /* Suppress unused-variable warnings by "using" E.  */
00917 #if ! defined lint || defined __GNUC__
00918 # define YYUSE(e) ((void) (e))
00919 #else
00920 # define YYUSE(e) /* empty */
00921 #endif
00922 
00923 /* Identity function, used to suppress warnings about constant conditions.  */
00924 #ifndef lint
00925 # define YYID(n) (n)
00926 #else
00927 #if (defined __STDC__ || defined __C99__FUNC__ \
00928      || defined __cplusplus || defined _MSC_VER)
00929 static int
00930 YYID (int yyi)
00931 #else
00932 static int
00933 YYID (yyi)
00934     int yyi;
00935 #endif
00936 {
00937   return yyi;
00938 }
00939 #endif
00940 
00941 #if ! defined yyoverflow || YYERROR_VERBOSE
00942 
00943 /* The parser invokes alloca or malloc; define the necessary symbols.  */
00944 
00945 # ifdef YYSTACK_USE_ALLOCA
00946 #  if YYSTACK_USE_ALLOCA
00947 #   ifdef __GNUC__
00948 #    define YYSTACK_ALLOC __builtin_alloca
00949 #   elif defined __BUILTIN_VA_ARG_INCR
00950 #    include <alloca.h> /* INFRINGES ON USER NAME SPACE */
00951 #   elif defined _AIX
00952 #    define YYSTACK_ALLOC __alloca
00953 #   elif defined _MSC_VER
00954 #    include <malloc.h> /* INFRINGES ON USER NAME SPACE */
00955 #    define alloca _alloca
00956 #   else
00957 #    define YYSTACK_ALLOC alloca
00958 #    if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
00959      || defined __cplusplus || defined _MSC_VER)
00960 #     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
00961 #     ifndef _STDLIB_H
00962 #      define _STDLIB_H 1
00963 #     endif
00964 #    endif
00965 #   endif
00966 #  endif
00967 # endif
00968 
00969 # ifdef YYSTACK_ALLOC
00970    /* Pacify GCC's `empty if-body' warning.  */
00971 #  define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
00972 #  ifndef YYSTACK_ALLOC_MAXIMUM
00973     /* The OS might guarantee only one guard page at the bottom of the stack,
00974        and a page size can be as small as 4096 bytes.  So we cannot safely
00975        invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
00976        to allow for a few compiler-allocated temporary stack slots.  */
00977 #   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
00978 #  endif
00979 # else
00980 #  define YYSTACK_ALLOC YYMALLOC
00981 #  define YYSTACK_FREE YYFREE
00982 #  ifndef YYSTACK_ALLOC_MAXIMUM
00983 #   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
00984 #  endif
00985 #  if (defined __cplusplus && ! defined _STDLIB_H \
00986        && ! ((defined YYMALLOC || defined malloc) \
00987              && (defined YYFREE || defined free)))
00988 #   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
00989 #   ifndef _STDLIB_H
00990 #    define _STDLIB_H 1
00991 #   endif
00992 #  endif
00993 #  ifndef YYMALLOC
00994 #   define YYMALLOC malloc
00995 #   if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
00996      || defined __cplusplus || defined _MSC_VER)
00997 void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
00998 #   endif
00999 #  endif
01000 #  ifndef YYFREE
01001 #   define YYFREE free
01002 #   if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
01003      || defined __cplusplus || defined _MSC_VER)
01004 void free (void *); /* INFRINGES ON USER NAME SPACE */
01005 #   endif
01006 #  endif
01007 # endif
01008 #endif /* ! defined yyoverflow || YYERROR_VERBOSE */
01009 
01010 
01011 #if (! defined yyoverflow \
01012      && (! defined __cplusplus \
01013          || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
01014 
01015 /* A type that is properly aligned for any stack member.  */
01016 union yyalloc
01017 {
01018   yytype_int16 yyss_alloc;
01019   YYSTYPE yyvs_alloc;
01020 };
01021 
01022 /* The size of the maximum gap between one aligned stack and the next.  */
01023 # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
01024 
01025 /* The size of an array large to enough to hold all stacks, each with
01026    N elements.  */
01027 # define YYSTACK_BYTES(N) \
01028      ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
01029       + YYSTACK_GAP_MAXIMUM)
01030 
01031 /* Copy COUNT objects from FROM to TO.  The source and destination do
01032    not overlap.  */
01033 # ifndef YYCOPY
01034 #  if defined __GNUC__ && 1 < __GNUC__
01035 #   define YYCOPY(To, From, Count) \
01036       __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
01037 #  else
01038 #   define YYCOPY(To, From, Count)              \
01039       do                                        \
01040         {                                       \
01041           YYSIZE_T yyi;                         \
01042           for (yyi = 0; yyi < (Count); yyi++)   \
01043             (To)[yyi] = (From)[yyi];            \
01044         }                                       \
01045       while (YYID (0))
01046 #  endif
01047 # endif
01048 
01049 /* Relocate STACK from its old location to the new one.  The
01050    local variables YYSIZE and YYSTACKSIZE give the old and new number of
01051    elements in the stack, and YYPTR gives the new location of the
01052    stack.  Advance YYPTR to a properly aligned location for the next
01053    stack.  */
01054 # define YYSTACK_RELOCATE(Stack_alloc, Stack)                           \
01055     do                                                                  \
01056       {                                                                 \
01057         YYSIZE_T yynewbytes;                                            \
01058         YYCOPY (&yyptr->Stack_alloc, Stack, yysize);                    \
01059         Stack = &yyptr->Stack_alloc;                                    \
01060         yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
01061         yyptr += yynewbytes / sizeof (*yyptr);                          \
01062       }                                                                 \
01063     while (YYID (0))
01064 
01065 #endif
01066 
01067 /* YYFINAL -- State number of the termination state.  */
01068 #define YYFINAL  3
01069 /* YYLAST -- Last index in YYTABLE.  */
01070 #define YYLAST   10410
01071 
01072 /* YYNTOKENS -- Number of terminals.  */
01073 #define YYNTOKENS  148
01074 /* YYNNTS -- Number of nonterminals.  */
01075 #define YYNNTS  172
01076 /* YYNRULES -- Number of rules.  */
01077 #define YYNRULES  565
01078 /* YYNRULES -- Number of states.  */
01079 #define YYNSTATES  975
01080 
01081 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
01082 #define YYUNDEFTOK  2
01083 #define YYMAXUTOK   375
01084 
01085 #define YYTRANSLATE(YYX)                                                \
01086   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
01087 
01088 /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
01089 static const yytype_uint8 yytranslate[] =
01090 {
01091        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01092      147,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01093        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01094        2,     2,   146,   123,     2,     2,     2,   121,   116,     2,
01095      142,   143,   119,   117,   140,   118,   139,   120,     2,     2,
01096        2,     2,     2,     2,     2,     2,     2,     2,   111,   145,
01097      113,   109,   112,   110,     2,     2,     2,     2,     2,     2,
01098        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01099        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01100        2,   138,     2,   144,   115,     2,   141,     2,     2,     2,
01101        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01102        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01103        2,     2,     2,   136,   114,   137,   124,     2,     2,     2,
01104        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01105        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01106        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01107        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01108        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01109        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01110        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01111        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01112        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01113        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01114        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01115        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01116        2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
01117        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
01118       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
01119       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
01120       35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
01121       45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
01122       55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
01123       65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
01124       75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
01125       85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
01126       95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
01127      105,   106,   107,   108,   122,   125,   126,   127,   128,   129,
01128      130,   131,   132,   133,   134,   135
01129 };
01130 
01131 #if YYDEBUG
01132 /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
01133    YYRHS.  */
01134 static const yytype_uint16 yyprhs[] =
01135 {
01136        0,     0,     3,     4,     7,    10,    12,    14,    18,    21,
01137       23,    24,    30,    35,    38,    40,    42,    46,    49,    50,
01138       55,    59,    63,    67,    70,    74,    78,    82,    86,    90,
01139       95,    99,   103,   107,   114,   120,   126,   132,   138,   142,
01140      146,   150,   154,   156,   158,   162,   166,   170,   173,   175,
01141      177,   179,   181,   183,   188,   193,   194,   200,   203,   207,
01142      212,   218,   223,   229,   232,   235,   238,   241,   244,   246,
01143      250,   252,   256,   258,   261,   265,   271,   274,   279,   282,
01144      287,   289,   293,   295,   299,   302,   306,   308,   312,   314,
01145      319,   323,   327,   331,   335,   338,   340,   342,   347,   351,
01146      355,   359,   363,   366,   368,   370,   372,   375,   377,   381,
01147      383,   385,   387,   389,   391,   393,   395,   397,   399,   401,
01148      402,   407,   409,   411,   413,   415,   417,   419,   421,   423,
01149      425,   427,   429,   431,   433,   435,   437,   439,   441,   443,
01150      445,   447,   449,   451,   453,   455,   457,   459,   461,   463,
01151      465,   467,   469,   471,   473,   475,   477,   479,   481,   483,
01152      485,   487,   489,   491,   493,   495,   497,   499,   501,   503,
01153      505,   507,   509,   511,   513,   515,   517,   519,   521,   523,
01154      525,   527,   529,   531,   533,   535,   537,   539,   541,   543,
01155      545,   547,   551,   557,   561,   567,   574,   580,   586,   592,
01156      598,   603,   607,   611,   615,   619,   623,   627,   631,   635,
01157      639,   644,   649,   652,   655,   659,   663,   667,   671,   675,
01158      679,   683,   687,   691,   695,   699,   703,   707,   710,   713,
01159      717,   721,   725,   729,   730,   735,   742,   744,   746,   748,
01160      751,   756,   759,   763,   765,   767,   769,   771,   773,   776,
01161      779,   784,   786,   787,   790,   793,   796,   798,   800,   802,
01162      805,   809,   814,   818,   823,   826,   828,   830,   832,   834,
01163      836,   838,   840,   842,   844,   845,   850,   851,   856,   860,
01164      864,   867,   871,   875,   877,   882,   886,   888,   889,   896,
01165      901,   905,   908,   910,   913,   916,   923,   930,   931,   932,
01166      940,   941,   942,   950,   956,   961,   962,   963,   973,   974,
01167      981,   982,   983,   992,   993,   999,  1000,  1007,  1008,  1009,
01168     1019,  1021,  1023,  1025,  1027,  1029,  1031,  1033,  1035,  1037,
01169     1039,  1041,  1043,  1045,  1047,  1049,  1051,  1053,  1055,  1058,
01170     1060,  1062,  1064,  1070,  1072,  1075,  1077,  1079,  1081,  1085,
01171     1087,  1091,  1093,  1098,  1105,  1109,  1115,  1118,  1123,  1125,
01172     1129,  1136,  1145,  1150,  1157,  1162,  1165,  1172,  1175,  1180,
01173     1187,  1190,  1195,  1198,  1203,  1205,  1207,  1209,  1213,  1215,
01174     1220,  1222,  1225,  1227,  1231,  1233,  1235,  1236,  1237,  1242,
01175     1247,  1249,  1253,  1257,  1258,  1264,  1267,  1272,  1277,  1280,
01176     1285,  1290,  1294,  1298,  1302,  1305,  1307,  1312,  1313,  1319,
01177     1320,  1326,  1332,  1334,  1336,  1343,  1345,  1347,  1349,  1351,
01178     1354,  1356,  1359,  1361,  1363,  1365,  1367,  1369,  1371,  1373,
01179     1376,  1380,  1384,  1388,  1392,  1396,  1397,  1401,  1403,  1406,
01180     1410,  1414,  1415,  1419,  1420,  1423,  1424,  1427,  1428,  1431,
01181     1433,  1434,  1438,  1439,  1440,  1446,  1448,  1450,  1452,  1454,
01182     1457,  1459,  1461,  1463,  1465,  1469,  1471,  1473,  1476,  1479,
01183     1481,  1483,  1485,  1487,  1489,  1491,  1493,  1495,  1497,  1499,
01184     1501,  1503,  1505,  1507,  1509,  1511,  1513,  1514,  1519,  1522,
01185     1526,  1529,  1536,  1545,  1550,  1557,  1562,  1569,  1572,  1577,
01186     1584,  1587,  1592,  1595,  1600,  1602,  1603,  1605,  1607,  1609,
01187     1611,  1613,  1615,  1617,  1621,  1623,  1627,  1631,  1635,  1637,
01188     1641,  1643,  1647,  1649,  1651,  1654,  1656,  1658,  1660,  1663,
01189     1666,  1668,  1670,  1671,  1676,  1678,  1681,  1683,  1687,  1691,
01190     1694,  1696,  1698,  1700,  1702,  1704,  1706,  1708,  1710,  1712,
01191     1714,  1716,  1718,  1719,  1721,  1722,  1724,  1727,  1730,  1731,
01192     1733,  1735,  1737,  1739,  1741,  1744
01193 };
01194 
01195 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
01196 static const yytype_int16 yyrhs[] =
01197 {
01198      149,     0,    -1,    -1,   150,   151,    -1,   152,   312,    -1,
01199      319,    -1,   153,    -1,   152,   318,   153,    -1,     1,   153,
01200       -1,   158,    -1,    -1,    47,   154,   136,   151,   137,    -1,
01201      156,   255,   230,   258,    -1,   157,   312,    -1,   319,    -1,
01202      158,    -1,   157,   318,   158,    -1,     1,   158,    -1,    -1,
01203       45,   179,   159,   179,    -1,    45,    54,    54,    -1,    45,
01204       54,    64,    -1,    45,    54,    63,    -1,     6,   180,    -1,
01205      158,    40,   161,    -1,   158,    41,   161,    -1,   158,    42,
01206      161,    -1,   158,    43,   161,    -1,   158,    44,   158,    -1,
01207       48,   136,   156,   137,    -1,   174,   109,   162,    -1,   167,
01208      109,   162,    -1,   284,    87,   162,    -1,   215,   138,   190,
01209      315,    87,   162,    -1,   215,   139,    52,    87,   162,    -1,
01210      215,   139,    56,    87,   162,    -1,   215,    85,    56,    87,
01211      162,    -1,   215,    85,    52,    87,   162,    -1,   285,    87,
01212      162,    -1,   174,   109,   197,    -1,   167,   109,   186,    -1,
01213      167,   109,   197,    -1,   160,    -1,   162,    -1,   160,    37,
01214      160,    -1,   160,    38,   160,    -1,    39,   313,   160,    -1,
01215      123,   162,    -1,   184,    -1,   160,    -1,   166,    -1,   163,
01216       -1,   248,    -1,   248,   139,   309,   192,    -1,   248,    85,
01217      309,   192,    -1,    -1,    94,   165,   236,   156,   137,    -1,
01218      308,   192,    -1,   308,   192,   164,    -1,   215,   139,   309,
01219      192,    -1,   215,   139,   309,   192,   164,    -1,   215,    85,
01220      309,   192,    -1,   215,    85,   309,   192,   164,    -1,    32,
01221      192,    -1,    31,   192,    -1,    30,   191,    -1,    21,   191,
01222       -1,    22,   191,    -1,   169,    -1,    89,   168,   314,    -1,
01223      169,    -1,    89,   168,   314,    -1,   171,    -1,   171,   170,
01224       -1,   171,    95,   173,    -1,   171,    95,   173,   140,   172,
01225       -1,   171,    95,    -1,   171,    95,   140,   172,    -1,    95,
01226      173,    -1,    95,   173,   140,   172,    -1,    95,    -1,    95,
01227      140,   172,    -1,   173,    -1,    89,   168,   314,    -1,   170,
01228      140,    -1,   171,   170,   140,    -1,   170,    -1,   172,   140,
01229      170,    -1,   282,    -1,   215,   138,   190,   315,    -1,   215,
01230      139,    52,    -1,   215,    85,    52,    -1,   215,   139,    56,
01231       -1,   215,    85,    56,    -1,    86,    56,    -1,   285,    -1,
01232      282,    -1,   215,   138,   190,   315,    -1,   215,   139,    52,
01233       -1,   215,    85,    52,    -1,   215,   139,    56,    -1,   215,
01234       85,    56,    -1,    86,    56,    -1,   285,    -1,    52,    -1,
01235       56,    -1,    86,   175,    -1,   175,    -1,   215,    85,   175,
01236       -1,    52,    -1,    56,    -1,    53,    -1,   182,    -1,   183,
01237       -1,   177,    -1,   278,    -1,   178,    -1,   280,    -1,   179,
01238       -1,    -1,   180,   140,   181,   179,    -1,   114,    -1,   115,
01239       -1,   116,    -1,    69,    -1,    70,    -1,    71,    -1,    77,
01240       -1,    78,    -1,   112,    -1,    73,    -1,   113,    -1,    74,
01241       -1,    72,    -1,    83,    -1,    84,    -1,   117,    -1,   118,
01242       -1,   119,    -1,    95,    -1,   120,    -1,   121,    -1,    68,
01243       -1,   123,    -1,   124,    -1,    66,    -1,    67,    -1,    81,
01244       -1,    82,    -1,   141,    -1,    49,    -1,    50,    -1,    51,
01245       -1,    47,    -1,    48,    -1,    45,    -1,    37,    -1,     7,
01246       -1,    21,    -1,    16,    -1,     3,    -1,     5,    -1,    46,
01247       -1,    26,    -1,    15,    -1,    14,    -1,    10,    -1,     9,
01248       -1,    36,    -1,    20,    -1,    25,    -1,     4,    -1,    22,
01249       -1,    34,    -1,    39,    -1,    38,    -1,    23,    -1,     8,
01250       -1,    24,    -1,    30,    -1,    33,    -1,    32,    -1,    13,
01251       -1,    35,    -1,     6,    -1,    17,    -1,    31,    -1,    11,
01252       -1,    12,    -1,    18,    -1,    19,    -1,   174,   109,   184,
01253       -1,   174,   109,   184,    44,   184,    -1,   284,    87,   184,
01254       -1,   284,    87,   184,    44,   184,    -1,   215,   138,   190,
01255      315,    87,   184,    -1,   215,   139,    52,    87,   184,    -1,
01256      215,   139,    56,    87,   184,    -1,   215,    85,    52,    87,
01257      184,    -1,   215,    85,    56,    87,   184,    -1,    86,    56,
01258       87,   184,    -1,   285,    87,   184,    -1,   184,    79,   184,
01259       -1,   184,    80,   184,    -1,   184,   117,   184,    -1,   184,
01260      118,   184,    -1,   184,   119,   184,    -1,   184,   120,   184,
01261       -1,   184,   121,   184,    -1,   184,    68,   184,    -1,   122,
01262       59,    68,   184,    -1,   122,    60,    68,   184,    -1,    66,
01263      184,    -1,    67,   184,    -1,   184,   114,   184,    -1,   184,
01264      115,   184,    -1,   184,   116,   184,    -1,   184,    69,   184,
01265       -1,   184,   112,   184,    -1,   184,    73,   184,    -1,   184,
01266      113,   184,    -1,   184,    74,   184,    -1,   184,    70,   184,
01267       -1,   184,    71,   184,    -1,   184,    72,   184,    -1,   184,
01268       77,   184,    -1,   184,    78,   184,    -1,   123,   184,    -1,
01269      124,   184,    -1,   184,    83,   184,    -1,   184,    84,   184,
01270       -1,   184,    75,   184,    -1,   184,    76,   184,    -1,    -1,
01271       46,   313,   185,   184,    -1,   184,   110,   184,   313,   111,
01272      184,    -1,   198,    -1,   184,    -1,   319,    -1,   196,   316,
01273       -1,   196,   140,   306,   316,    -1,   306,   316,    -1,   142,
01274      190,   314,    -1,   319,    -1,   188,    -1,   319,    -1,   191,
01275       -1,   166,    -1,   196,   195,    -1,   306,   195,    -1,   196,
01276      140,   306,   195,    -1,   194,    -1,    -1,   193,   191,    -1,
01277       96,   186,    -1,   140,   194,    -1,   140,    -1,   319,    -1,
01278      186,    -1,    95,   186,    -1,   196,   140,   186,    -1,   196,
01279      140,    95,   186,    -1,   196,   140,   186,    -1,   196,   140,
01280       95,   186,    -1,    95,   186,    -1,   259,    -1,   260,    -1,
01281      263,    -1,   264,    -1,   265,    -1,   268,    -1,   283,    -1,
01282      285,    -1,    53,    -1,    -1,   216,   199,   155,   226,    -1,
01283       -1,    90,   160,   200,   314,    -1,    89,   156,   143,    -1,
01284      215,    85,    56,    -1,    86,    56,    -1,    92,   187,   144,
01285       -1,    93,   305,   137,    -1,    30,    -1,    31,   142,   191,
01286      314,    -1,    31,   142,   314,    -1,    31,    -1,    -1,    46,
01287      313,   142,   201,   160,   314,    -1,    39,   142,   160,   314,
01288       -1,    39,   142,   314,    -1,   308,   250,    -1,   249,    -1,
01289      249,   250,    -1,    97,   241,    -1,   217,   161,   227,   156,
01290      229,   226,    -1,   218,   161,   227,   156,   230,   226,    -1,
01291       -1,    -1,   219,   202,   161,   228,   203,   156,   226,    -1,
01292       -1,    -1,   220,   204,   161,   228,   205,   156,   226,    -1,
01293      221,   161,   312,   253,   226,    -1,   221,   312,   253,   226,
01294       -1,    -1,    -1,   222,   231,    25,   206,   161,   228,   207,
01295      156,   226,    -1,    -1,   223,   176,   286,   208,   155,   226,
01296       -1,    -1,    -1,   223,    83,   160,   209,   317,   210,   155,
01297      226,    -1,    -1,   224,   176,   211,   155,   226,    -1,    -1,
01298      225,   177,   212,   288,   155,   226,    -1,    -1,    -1,   225,
01299      303,   311,   213,   177,   214,   288,   155,   226,    -1,    21,
01300       -1,    22,    -1,    23,    -1,    24,    -1,   198,    -1,     7,
01301       -1,    11,    -1,    12,    -1,    18,    -1,    19,    -1,    16,
01302       -1,    20,    -1,     3,    -1,     4,    -1,     5,    -1,    10,
01303       -1,   317,    -1,    13,    -1,   317,    13,    -1,   317,    -1,
01304       27,    -1,   230,    -1,    14,   161,   227,   156,   229,    -1,
01305      319,    -1,    15,   156,    -1,   174,    -1,   167,    -1,   291,
01306       -1,    89,   234,   314,    -1,   232,    -1,   233,   140,   232,
01307       -1,   233,    -1,   233,   140,    95,   291,    -1,   233,   140,
01308       95,   291,   140,   233,    -1,   233,   140,    95,    -1,   233,
01309      140,    95,   140,   233,    -1,    95,   291,    -1,    95,   291,
01310      140,   233,    -1,    95,    -1,    95,   140,   233,    -1,   293,
01311      140,   296,   140,   299,   302,    -1,   293,   140,   296,   140,
01312      299,   140,   293,   302,    -1,   293,   140,   296,   302,    -1,
01313      293,   140,   296,   140,   293,   302,    -1,   293,   140,   299,
01314      302,    -1,   293,   140,    -1,   293,   140,   299,   140,   293,
01315      302,    -1,   293,   302,    -1,   296,   140,   299,   302,    -1,
01316      296,   140,   299,   140,   293,   302,    -1,   296,   302,    -1,
01317      296,   140,   293,   302,    -1,   299,   302,    -1,   299,   140,
01318      293,   302,    -1,   301,    -1,   319,    -1,   237,    -1,   114,
01319      238,   114,    -1,    76,    -1,   114,   235,   238,   114,    -1,
01320      319,    -1,   145,   239,    -1,   240,    -1,   239,   140,   240,
01321       -1,    52,    -1,   290,    -1,    -1,    -1,   242,   243,   244,
01322      245,    -1,   142,   289,   238,   314,    -1,   289,    -1,   107,
01323      156,   137,    -1,    29,   156,    10,    -1,    -1,    28,   247,
01324      236,   156,    10,    -1,   166,   246,    -1,   248,   139,   309,
01325      189,    -1,   248,    85,   309,   189,    -1,   308,   188,    -1,
01326      215,   139,   309,   189,    -1,   215,    85,   309,   188,    -1,
01327      215,    85,   310,    -1,   215,   139,   188,    -1,   215,    85,
01328      188,    -1,    32,   188,    -1,    32,    -1,   215,   138,   190,
01329      315,    -1,    -1,   136,   251,   236,   156,   137,    -1,    -1,
01330       26,   252,   236,   156,    10,    -1,    17,   196,   227,   156,
01331      254,    -1,   230,    -1,   253,    -1,     8,   256,   257,   227,
01332      156,   255,    -1,   319,    -1,   186,    -1,   197,    -1,   319,
01333       -1,    88,   174,    -1,   319,    -1,     9,   156,    -1,   319,
01334       -1,   281,    -1,   278,    -1,   280,    -1,   261,    -1,    62,
01335       -1,   262,    -1,   261,   262,    -1,    99,   270,   106,    -1,
01336      100,   271,   106,    -1,   101,   272,    65,    -1,   102,   146,
01337      106,    -1,   102,   266,   106,    -1,    -1,   266,   267,   146,
01338       -1,   273,    -1,   267,   273,    -1,   103,   146,   106,    -1,
01339      103,   269,   106,    -1,    -1,   269,    61,   146,    -1,    -1,
01340      270,   273,    -1,    -1,   271,   273,    -1,    -1,   272,   273,
01341       -1,    61,    -1,    -1,   105,   274,   277,    -1,    -1,    -1,
01342      104,   275,   276,   156,   137,    -1,    54,    -1,    55,    -1,
01343       57,    -1,   285,    -1,    98,   279,    -1,   177,    -1,    55,
01344       -1,    54,    -1,    57,    -1,    98,   271,   106,    -1,    59,
01345       -1,    60,    -1,   122,    59,    -1,   122,    60,    -1,    52,
01346       -1,    55,    -1,    54,    -1,    56,    -1,    57,    -1,    34,
01347       -1,    33,    -1,    35,    -1,    36,    -1,    50,    -1,    49,
01348       -1,    51,    -1,   282,    -1,   282,    -1,    63,    -1,    64,
01349       -1,   317,    -1,    -1,   113,   287,   161,   317,    -1,     1,
01350      317,    -1,   142,   289,   314,    -1,   289,   317,    -1,   293,
01351      140,   297,   140,   299,   302,    -1,   293,   140,   297,   140,
01352      299,   140,   293,   302,    -1,   293,   140,   297,   302,    -1,
01353      293,   140,   297,   140,   293,   302,    -1,   293,   140,   299,
01354      302,    -1,   293,   140,   299,   140,   293,   302,    -1,   293,
01355      302,    -1,   297,   140,   299,   302,    -1,   297,   140,   299,
01356      140,   293,   302,    -1,   297,   302,    -1,   297,   140,   293,
01357      302,    -1,   299,   302,    -1,   299,   140,   293,   302,    -1,
01358      301,    -1,    -1,    56,    -1,    55,    -1,    54,    -1,    57,
01359       -1,   290,    -1,    52,    -1,   291,    -1,    89,   234,   314,
01360       -1,   292,    -1,   293,   140,   292,    -1,    52,   109,   186,
01361       -1,    52,   109,   215,    -1,   295,    -1,   296,   140,   295,
01362       -1,   294,    -1,   297,   140,   294,    -1,   119,    -1,    95,
01363       -1,   298,    52,    -1,   298,    -1,   116,    -1,    96,    -1,
01364      300,    52,    -1,   140,   301,    -1,   319,    -1,   283,    -1,
01365       -1,   142,   304,   160,   314,    -1,   319,    -1,   306,   316,
01366       -1,   307,    -1,   306,   140,   307,    -1,   186,    88,   186,
01367       -1,    58,   186,    -1,    52,    -1,    56,    -1,    53,    -1,
01368       52,    -1,    56,    -1,    53,    -1,   182,    -1,    52,    -1,
01369       53,    -1,   182,    -1,   139,    -1,    85,    -1,    -1,   318,
01370       -1,    -1,   147,    -1,   313,   143,    -1,   313,   144,    -1,
01371       -1,   147,    -1,   140,    -1,   145,    -1,   147,    -1,   317,
01372       -1,   318,   145,    -1,    -1
01373 };
01374 
01375 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
01376 static const yytype_uint16 yyrline[] =
01377 {
01378        0,   786,   786,   786,   817,   828,   837,   845,   853,   859,
01379      861,   860,   884,   917,   928,   937,   945,   953,   959,   959,
01380      967,   975,   986,   996,  1004,  1013,  1022,  1035,  1048,  1057,
01381     1069,  1078,  1088,  1117,  1138,  1155,  1172,  1177,  1194,  1204,
01382     1213,  1222,  1231,  1234,  1235,  1243,  1251,  1259,  1267,  1270,
01383     1282,  1283,  1286,  1287,  1296,  1308,  1307,  1329,  1338,  1350,
01384     1359,  1371,  1380,  1392,  1401,  1410,  1418,  1426,  1436,  1437,
01385     1447,  1448,  1458,  1466,  1474,  1482,  1491,  1499,  1507,  1515,
01386     1523,  1531,  1541,  1542,  1552,  1560,  1570,  1578,  1588,  1592,
01387     1600,  1608,  1616,  1624,  1636,  1646,  1658,  1667,  1675,  1683,
01388     1691,  1699,  1712,  1725,  1736,  1744,  1747,  1755,  1763,  1773,
01389     1774,  1775,  1776,  1781,  1792,  1793,  1796,  1804,  1807,  1815,
01390     1815,  1825,  1826,  1827,  1828,  1829,  1830,  1831,  1832,  1833,
01391     1834,  1835,  1836,  1837,  1838,  1839,  1840,  1841,  1842,  1843,
01392     1844,  1845,  1846,  1847,  1848,  1849,  1850,  1851,  1852,  1853,
01393     1856,  1856,  1856,  1857,  1857,  1858,  1858,  1858,  1859,  1859,
01394     1859,  1859,  1860,  1860,  1860,  1860,  1861,  1861,  1861,  1862,
01395     1862,  1862,  1862,  1863,  1863,  1863,  1863,  1864,  1864,  1864,
01396     1864,  1865,  1865,  1865,  1865,  1866,  1866,  1866,  1866,  1867,
01397     1867,  1870,  1879,  1889,  1918,  1949,  1975,  1992,  2009,  2026,
01398     2037,  2048,  2059,  2073,  2087,  2095,  2103,  2111,  2119,  2127,
01399     2135,  2144,  2153,  2161,  2169,  2177,  2185,  2193,  2201,  2209,
01400     2217,  2225,  2233,  2241,  2249,  2257,  2268,  2276,  2284,  2292,
01401     2300,  2308,  2316,  2324,  2324,  2334,  2344,  2350,  2362,  2363,
01402     2367,  2375,  2385,  2395,  2396,  2399,  2400,  2403,  2412,  2420,
01403     2430,  2439,  2448,  2448,  2460,  2470,  2474,  2478,  2484,  2492,
01404     2500,  2514,  2530,  2544,  2559,  2569,  2570,  2571,  2572,  2573,
01405     2574,  2575,  2576,  2577,  2586,  2585,  2610,  2610,  2619,  2627,
01406     2635,  2643,  2656,  2664,  2672,  2680,  2688,  2696,  2696,  2706,
01407     2714,  2722,  2733,  2734,  2745,  2749,  2761,  2773,  2773,  2773,
01408     2784,  2784,  2784,  2795,  2806,  2815,  2817,  2814,  2881,  2880,
01409     2902,  2907,  2901,  2926,  2925,  2947,  2946,  2969,  2970,  2969,
01410     2990,  2998,  3006,  3014,  3024,  3036,  3042,  3048,  3054,  3060,
01411     3066,  3072,  3078,  3084,  3090,  3100,  3106,  3111,  3112,  3119,
01412     3124,  3127,  3128,  3141,  3142,  3152,  3153,  3156,  3164,  3174,
01413     3182,  3192,  3200,  3209,  3218,  3226,  3234,  3243,  3255,  3263,
01414     3273,  3281,  3289,  3297,  3305,  3313,  3322,  3330,  3338,  3346,
01415     3354,  3362,  3370,  3378,  3386,  3396,  3397,  3403,  3412,  3421,
01416     3432,  3433,  3443,  3450,  3459,  3467,  3473,  3476,  3473,  3494,
01417     3502,  3512,  3516,  3523,  3522,  3543,  3559,  3568,  3579,  3588,
01418     3598,  3608,  3616,  3627,  3638,  3646,  3654,  3669,  3668,  3688,
01419     3687,  3708,  3720,  3721,  3724,  3743,  3746,  3754,  3762,  3765,
01420     3769,  3772,  3780,  3783,  3784,  3792,  3795,  3812,  3813,  3814,
01421     3824,  3834,  3861,  3925,  3933,  3940,  3947,  3957,  3965,  3975,
01422     3983,  3990,  3997,  4008,  4015,  4026,  4033,  4044,  4051,  4080,
01423     4082,  4081,  4098,  4104,  4097,  4123,  4131,  4139,  4147,  4150,
01424     4161,  4162,  4163,  4164,  4167,  4197,  4198,  4199,  4207,  4217,
01425     4218,  4219,  4220,  4221,  4222,  4223,  4224,  4225,  4226,  4227,
01426     4228,  4231,  4241,  4251,  4252,  4255,  4264,  4263,  4271,  4283,
01427     4293,  4299,  4307,  4315,  4323,  4331,  4339,  4347,  4355,  4363,
01428     4371,  4379,  4387,  4395,  4403,  4412,  4421,  4430,  4439,  4448,
01429     4459,  4460,  4467,  4476,  4495,  4502,  4515,  4527,  4539,  4547,
01430     4563,  4571,  4587,  4588,  4591,  4604,  4615,  4616,  4619,  4636,
01431     4640,  4650,  4660,  4660,  4689,  4690,  4700,  4707,  4717,  4725,
01432     4735,  4736,  4737,  4740,  4741,  4742,  4743,  4746,  4747,  4748,
01433     4751,  4756,  4763,  4764,  4767,  4768,  4771,  4774,  4777,  4778,
01434     4779,  4782,  4783,  4786,  4787,  4791
01435 };
01436 #endif
01437 
01438 #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
01439 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
01440    First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
01441 static const char *const yytname[] =
01442 {
01443   "$end", "error", "$undefined", "keyword_class", "keyword_module",
01444   "keyword_def", "keyword_undef", "keyword_begin", "keyword_rescue",
01445   "keyword_ensure", "keyword_end", "keyword_if", "keyword_unless",
01446   "keyword_then", "keyword_elsif", "keyword_else", "keyword_case",
01447   "keyword_when", "keyword_while", "keyword_until", "keyword_for",
01448   "keyword_break", "keyword_next", "keyword_redo", "keyword_retry",
01449   "keyword_in", "keyword_do", "keyword_do_cond", "keyword_do_block",
01450   "keyword_do_LAMBDA", "keyword_return", "keyword_yield", "keyword_super",
01451   "keyword_self", "keyword_nil", "keyword_true", "keyword_false",
01452   "keyword_and", "keyword_or", "keyword_not", "modifier_if",
01453   "modifier_unless", "modifier_while", "modifier_until", "modifier_rescue",
01454   "keyword_alias", "keyword_defined", "keyword_BEGIN", "keyword_END",
01455   "keyword__LINE__", "keyword__FILE__", "keyword__ENCODING__",
01456   "tIDENTIFIER", "tFID", "tGVAR", "tIVAR", "tCONSTANT", "tCVAR", "tLABEL",
01457   "tINTEGER", "tFLOAT", "tSTRING_CONTENT", "tCHAR", "tNTH_REF",
01458   "tBACK_REF", "tREGEXP_END", "tUPLUS", "tUMINUS", "tPOW", "tCMP", "tEQ",
01459   "tEQQ", "tNEQ", "tGEQ", "tLEQ", "tANDOP", "tOROP", "tMATCH", "tNMATCH",
01460   "tDOT2", "tDOT3", "tAREF", "tASET", "tLSHFT", "tRSHFT", "tCOLON2",
01461   "tCOLON3", "tOP_ASGN", "tASSOC", "tLPAREN", "tLPAREN_ARG", "tRPAREN",
01462   "tLBRACK", "tLBRACE", "tLBRACE_ARG", "tSTAR", "tAMPER", "tLAMBDA",
01463   "tSYMBEG", "tSTRING_BEG", "tXSTRING_BEG", "tREGEXP_BEG", "tWORDS_BEG",
01464   "tQWORDS_BEG", "tSTRING_DBEG", "tSTRING_DVAR", "tSTRING_END", "tLAMBEG",
01465   "tLOWEST", "'='", "'?'", "':'", "'>'", "'<'", "'|'", "'^'", "'&'", "'+'",
01466   "'-'", "'*'", "'/'", "'%'", "tUMINUS_NUM", "'!'", "'~'", "idNULL",
01467   "idRespond_to", "idIFUNC", "idCFUNC", "id_core_set_method_alias",
01468   "id_core_set_variable_alias", "id_core_undef_method",
01469   "id_core_define_method", "id_core_define_singleton_method",
01470   "id_core_set_postexe", "tLAST_TOKEN", "'{'", "'}'", "'['", "'.'", "','",
01471   "'`'", "'('", "')'", "']'", "';'", "' '", "'\\n'", "$accept", "program",
01472   "$@1", "top_compstmt", "top_stmts", "top_stmt", "$@2", "bodystmt",
01473   "compstmt", "stmts", "stmt", "$@3", "expr", "expr_value", "command_call",
01474   "block_command", "cmd_brace_block", "@4", "command", "mlhs",
01475   "mlhs_inner", "mlhs_basic", "mlhs_item", "mlhs_head", "mlhs_post",
01476   "mlhs_node", "lhs", "cname", "cpath", "fname", "fsym", "fitem",
01477   "undef_list", "$@5", "op", "reswords", "arg", "$@6", "arg_value",
01478   "aref_args", "paren_args", "opt_paren_args", "opt_call_args",
01479   "call_args", "command_args", "@7", "block_arg", "opt_block_arg", "args",
01480   "mrhs", "primary", "@8", "$@9", "$@10", "$@11", "$@12", "$@13", "$@14",
01481   "$@15", "$@16", "@17", "@18", "@19", "@20", "@21", "$@22", "$@23",
01482   "primary_value", "k_begin", "k_if", "k_unless", "k_while", "k_until",
01483   "k_case", "k_for", "k_class", "k_module", "k_def", "k_end", "then", "do",
01484   "if_tail", "opt_else", "for_var", "f_marg", "f_marg_list", "f_margs",
01485   "block_param", "opt_block_param", "block_param_def", "opt_bv_decl",
01486   "bv_decls", "bvar", "lambda", "@24", "@25", "f_larglist", "lambda_body",
01487   "do_block", "@26", "block_call", "method_call", "brace_block", "@27",
01488   "@28", "case_body", "cases", "opt_rescue", "exc_list", "exc_var",
01489   "opt_ensure", "literal", "strings", "string", "string1", "xstring",
01490   "regexp", "words", "word_list", "word", "qwords", "qword_list",
01491   "string_contents", "xstring_contents", "regexp_contents",
01492   "string_content", "@29", "@30", "@31", "string_dvar", "symbol", "sym",
01493   "dsym", "numeric", "variable", "var_ref", "var_lhs", "backref",
01494   "superclass", "$@32", "f_arglist", "f_args", "f_bad_arg", "f_norm_arg",
01495   "f_arg_item", "f_arg", "f_opt", "f_block_opt", "f_block_optarg",
01496   "f_optarg", "restarg_mark", "f_rest_arg", "blkarg_mark", "f_block_arg",
01497   "opt_f_block_arg", "singleton", "$@33", "assoc_list", "assocs", "assoc",
01498   "operation", "operation2", "operation3", "dot_or_colon", "opt_terms",
01499   "opt_nl", "rparen", "rbracket", "trailer", "term", "terms", "none", 0
01500 };
01501 #endif
01502 
01503 # ifdef YYPRINT
01504 /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
01505    token YYLEX-NUM.  */
01506 static const yytype_uint16 yytoknum[] =
01507 {
01508        0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
01509      265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
01510      275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
01511      285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
01512      295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
01513      305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
01514      315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
01515      325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
01516      335,   336,   337,   338,   339,   340,   341,   342,   343,   344,
01517      345,   346,   347,   348,   349,   350,   351,   352,   353,   354,
01518      355,   356,   357,   358,   359,   360,   361,   362,   363,    61,
01519       63,    58,    62,    60,   124,    94,    38,    43,    45,    42,
01520       47,    37,   364,    33,   126,   365,   366,   367,   368,   369,
01521      370,   371,   372,   373,   374,   375,   123,   125,    91,    46,
01522       44,    96,    40,    41,    93,    59,    32,    10
01523 };
01524 # endif
01525 
01526 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
01527 static const yytype_uint16 yyr1[] =
01528 {
01529        0,   148,   150,   149,   151,   152,   152,   152,   152,   153,
01530      154,   153,   155,   156,   157,   157,   157,   157,   159,   158,
01531      158,   158,   158,   158,   158,   158,   158,   158,   158,   158,
01532      158,   158,   158,   158,   158,   158,   158,   158,   158,   158,
01533      158,   158,   158,   160,   160,   160,   160,   160,   160,   161,
01534      162,   162,   163,   163,   163,   165,   164,   166,   166,   166,
01535      166,   166,   166,   166,   166,   166,   166,   166,   167,   167,
01536      168,   168,   169,   169,   169,   169,   169,   169,   169,   169,
01537      169,   169,   170,   170,   171,   171,   172,   172,   173,   173,
01538      173,   173,   173,   173,   173,   173,   174,   174,   174,   174,
01539      174,   174,   174,   174,   175,   175,   176,   176,   176,   177,
01540      177,   177,   177,   177,   178,   178,   179,   179,   180,   181,
01541      180,   182,   182,   182,   182,   182,   182,   182,   182,   182,
01542      182,   182,   182,   182,   182,   182,   182,   182,   182,   182,
01543      182,   182,   182,   182,   182,   182,   182,   182,   182,   182,
01544      183,   183,   183,   183,   183,   183,   183,   183,   183,   183,
01545      183,   183,   183,   183,   183,   183,   183,   183,   183,   183,
01546      183,   183,   183,   183,   183,   183,   183,   183,   183,   183,
01547      183,   183,   183,   183,   183,   183,   183,   183,   183,   183,
01548      183,   184,   184,   184,   184,   184,   184,   184,   184,   184,
01549      184,   184,   184,   184,   184,   184,   184,   184,   184,   184,
01550      184,   184,   184,   184,   184,   184,   184,   184,   184,   184,
01551      184,   184,   184,   184,   184,   184,   184,   184,   184,   184,
01552      184,   184,   184,   185,   184,   184,   184,   186,   187,   187,
01553      187,   187,   188,   189,   189,   190,   190,   191,   191,   191,
01554      191,   191,   193,   192,   194,   195,   195,   195,   196,   196,
01555      196,   196,   197,   197,   197,   198,   198,   198,   198,   198,
01556      198,   198,   198,   198,   199,   198,   200,   198,   198,   198,
01557      198,   198,   198,   198,   198,   198,   198,   201,   198,   198,
01558      198,   198,   198,   198,   198,   198,   198,   202,   203,   198,
01559      204,   205,   198,   198,   198,   206,   207,   198,   208,   198,
01560      209,   210,   198,   211,   198,   212,   198,   213,   214,   198,
01561      198,   198,   198,   198,   215,   216,   217,   218,   219,   220,
01562      221,   222,   223,   224,   225,   226,   227,   227,   227,   228,
01563      228,   229,   229,   230,   230,   231,   231,   232,   232,   233,
01564      233,   234,   234,   234,   234,   234,   234,   234,   234,   234,
01565      235,   235,   235,   235,   235,   235,   235,   235,   235,   235,
01566      235,   235,   235,   235,   235,   236,   236,   237,   237,   237,
01567      238,   238,   239,   239,   240,   240,   242,   243,   241,   244,
01568      244,   245,   245,   247,   246,   248,   248,   248,   249,   249,
01569      249,   249,   249,   249,   249,   249,   249,   251,   250,   252,
01570      250,   253,   254,   254,   255,   255,   256,   256,   256,   257,
01571      257,   258,   258,   259,   259,   259,   260,   261,   261,   261,
01572      262,   263,   264,   265,   265,   266,   266,   267,   267,   268,
01573      268,   269,   269,   270,   270,   271,   271,   272,   272,   273,
01574      274,   273,   275,   276,   273,   277,   277,   277,   277,   278,
01575      279,   279,   279,   279,   280,   281,   281,   281,   281,   282,
01576      282,   282,   282,   282,   282,   282,   282,   282,   282,   282,
01577      282,   283,   284,   285,   285,   286,   287,   286,   286,   288,
01578      288,   289,   289,   289,   289,   289,   289,   289,   289,   289,
01579      289,   289,   289,   289,   289,   289,   290,   290,   290,   290,
01580      291,   291,   292,   292,   293,   293,   294,   295,   296,   296,
01581      297,   297,   298,   298,   299,   299,   300,   300,   301,   302,
01582      302,   303,   304,   303,   305,   305,   306,   306,   307,   307,
01583      308,   308,   308,   309,   309,   309,   309,   310,   310,   310,
01584      311,   311,   312,   312,   313,   313,   314,   315,   316,   316,
01585      316,   317,   317,   318,   318,   319
01586 };
01587 
01588 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
01589 static const yytype_uint8 yyr2[] =
01590 {
01591        0,     2,     0,     2,     2,     1,     1,     3,     2,     1,
01592        0,     5,     4,     2,     1,     1,     3,     2,     0,     4,
01593        3,     3,     3,     2,     3,     3,     3,     3,     3,     4,
01594        3,     3,     3,     6,     5,     5,     5,     5,     3,     3,
01595        3,     3,     1,     1,     3,     3,     3,     2,     1,     1,
01596        1,     1,     1,     4,     4,     0,     5,     2,     3,     4,
01597        5,     4,     5,     2,     2,     2,     2,     2,     1,     3,
01598        1,     3,     1,     2,     3,     5,     2,     4,     2,     4,
01599        1,     3,     1,     3,     2,     3,     1,     3,     1,     4,
01600        3,     3,     3,     3,     2,     1,     1,     4,     3,     3,
01601        3,     3,     2,     1,     1,     1,     2,     1,     3,     1,
01602        1,     1,     1,     1,     1,     1,     1,     1,     1,     0,
01603        4,     1,     1,     1,     1,     1,     1,     1,     1,     1,
01604        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
01605        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
01606        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
01607        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
01608        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
01609        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
01610        1,     3,     5,     3,     5,     6,     5,     5,     5,     5,
01611        4,     3,     3,     3,     3,     3,     3,     3,     3,     3,
01612        4,     4,     2,     2,     3,     3,     3,     3,     3,     3,
01613        3,     3,     3,     3,     3,     3,     3,     2,     2,     3,
01614        3,     3,     3,     0,     4,     6,     1,     1,     1,     2,
01615        4,     2,     3,     1,     1,     1,     1,     1,     2,     2,
01616        4,     1,     0,     2,     2,     2,     1,     1,     1,     2,
01617        3,     4,     3,     4,     2,     1,     1,     1,     1,     1,
01618        1,     1,     1,     1,     0,     4,     0,     4,     3,     3,
01619        2,     3,     3,     1,     4,     3,     1,     0,     6,     4,
01620        3,     2,     1,     2,     2,     6,     6,     0,     0,     7,
01621        0,     0,     7,     5,     4,     0,     0,     9,     0,     6,
01622        0,     0,     8,     0,     5,     0,     6,     0,     0,     9,
01623        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
01624        1,     1,     1,     1,     1,     1,     1,     1,     2,     1,
01625        1,     1,     5,     1,     2,     1,     1,     1,     3,     1,
01626        3,     1,     4,     6,     3,     5,     2,     4,     1,     3,
01627        6,     8,     4,     6,     4,     2,     6,     2,     4,     6,
01628        2,     4,     2,     4,     1,     1,     1,     3,     1,     4,
01629        1,     2,     1,     3,     1,     1,     0,     0,     4,     4,
01630        1,     3,     3,     0,     5,     2,     4,     4,     2,     4,
01631        4,     3,     3,     3,     2,     1,     4,     0,     5,     0,
01632        5,     5,     1,     1,     6,     1,     1,     1,     1,     2,
01633        1,     2,     1,     1,     1,     1,     1,     1,     1,     2,
01634        3,     3,     3,     3,     3,     0,     3,     1,     2,     3,
01635        3,     0,     3,     0,     2,     0,     2,     0,     2,     1,
01636        0,     3,     0,     0,     5,     1,     1,     1,     1,     2,
01637        1,     1,     1,     1,     3,     1,     1,     2,     2,     1,
01638        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
01639        1,     1,     1,     1,     1,     1,     0,     4,     2,     3,
01640        2,     6,     8,     4,     6,     4,     6,     2,     4,     6,
01641        2,     4,     2,     4,     1,     0,     1,     1,     1,     1,
01642        1,     1,     1,     3,     1,     3,     3,     3,     1,     3,
01643        1,     3,     1,     1,     2,     1,     1,     1,     2,     2,
01644        1,     1,     0,     4,     1,     2,     1,     3,     3,     2,
01645        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
01646        1,     1,     0,     1,     0,     1,     2,     2,     0,     1,
01647        1,     1,     1,     1,     2,     0
01648 };
01649 
01650 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
01651    STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
01652    means the default is an error.  */
01653 static const yytype_uint16 yydefact[] =
01654 {
01655        2,     0,     0,     1,     0,   332,   333,   334,     0,   325,
01656      326,   327,   330,   328,   329,   331,   320,   321,   322,   323,
01657      283,   252,   252,   475,   474,   476,   477,   554,     0,   554,
01658       10,     0,   479,   478,   480,   469,   542,   471,   470,   472,
01659      473,   465,   466,   427,   483,   484,     0,     0,     0,     0,
01660        0,   565,   565,    80,   386,   445,   443,   445,   447,   435,
01661      441,     0,     0,     0,     3,   552,     6,     9,    42,    43,
01662       51,    50,     0,    68,     0,    72,    82,     0,    48,   236,
01663        0,   274,     0,     0,   297,   300,   552,     0,     0,     0,
01664        0,    52,   292,   265,   266,   426,   428,   267,   268,   269,
01665      270,   424,   425,   423,   481,   271,     0,   272,   252,     5,
01666        8,   160,   171,   161,   184,   157,   177,   167,   166,   187,
01667      188,   182,   165,   164,   159,   185,   189,   190,   169,   158,
01668      172,   176,   178,   170,   163,   179,   186,   181,   180,   173,
01669      183,   168,   156,   175,   174,   155,   162,   153,   154,   150,
01670      151,   152,   109,   111,   110,   145,   146,   142,   124,   125,
01671      126,   133,   130,   132,   127,   128,   147,   148,   134,   135,
01672      139,   129,   131,   121,   122,   123,   136,   137,   138,   140,
01673      141,   143,   144,   149,   114,   116,   118,    23,   112,   113,
01674      115,   117,     0,     0,     0,     0,     0,     0,     0,   247,
01675        0,   237,   258,    66,   251,   565,     0,   481,     0,   272,
01676      565,   536,    67,    65,   554,    64,     0,   565,   404,    63,
01677      554,   555,     0,     0,    18,   233,     0,     0,   320,   321,
01678      283,   286,   405,   212,     0,     0,   213,   280,     0,     0,
01679        0,   552,    15,   554,    70,    14,   276,     0,   558,   558,
01680      238,     0,     0,   558,   534,   554,     0,     0,     0,    78,
01681      324,     0,    88,    95,   294,   387,   462,   461,   463,   460,
01682        0,   459,     0,     0,     0,     0,     0,     0,     0,   467,
01683      468,    47,   227,   228,   561,   562,     4,   563,   553,     0,
01684        0,     0,     0,     0,     0,     0,   393,   395,     0,    84,
01685        0,    76,    73,     0,     0,     0,     0,     0,     0,     0,
01686        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
01687        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
01688        0,   565,     0,     0,    49,     0,     0,     0,     0,   552,
01689        0,   553,     0,   346,   345,     0,     0,   481,   272,   104,
01690      105,     0,     0,   107,     0,     0,   481,   272,   313,   180,
01691      173,   183,   168,   150,   151,   152,   109,   110,   532,   315,
01692      531,     0,     0,     0,   409,   407,   293,   429,     0,     0,
01693      398,    57,   291,   119,   539,   280,   259,   254,     0,     0,
01694      256,   248,   257,     0,   565,     0,     0,     0,   256,   249,
01695      554,     0,   285,   253,   554,   246,   245,   554,   290,    46,
01696       20,    22,    21,     0,   287,     0,     0,     0,     0,     0,
01697        0,    17,   554,   278,    13,   553,    69,   554,   281,   560,
01698      559,   239,   560,   241,   282,   535,     0,    94,   467,   468,
01699       86,    81,     0,     0,   565,     0,   505,   449,   452,   450,
01700      464,   446,   430,   444,   431,   432,   448,   433,   434,     0,
01701      437,   439,     0,   440,     0,     0,   564,     7,    24,    25,
01702       26,    27,    28,    44,    45,   565,     0,    31,    40,     0,
01703       41,   554,     0,    74,    85,    30,   191,   258,    39,   209,
01704      217,   222,   223,   224,   219,   221,   231,   232,   225,   226,
01705      202,   203,   229,   230,   554,   218,   220,   214,   215,   216,
01706      204,   205,   206,   207,   208,   543,   548,   544,   549,   403,
01707      252,   401,   554,   543,   545,   544,   546,   402,   252,     0,
01708      565,   337,     0,   336,     0,     0,     0,     0,     0,     0,
01709      280,     0,   565,     0,   305,   310,   104,   105,   106,     0,
01710      486,   308,   485,     0,   565,     0,     0,     0,   505,   551,
01711      550,   317,   543,   544,   252,   252,   565,   565,    32,   193,
01712       38,   201,    55,    58,     0,   191,   538,     0,   260,   255,
01713      565,   547,   544,   554,   543,   544,   537,   284,   556,   242,
01714      289,    19,     0,   234,     0,    29,     0,   565,   200,    71,
01715       16,   277,   558,     0,    79,    91,    93,   554,   543,   544,
01716      511,   508,   507,   506,   509,     0,   523,   527,   526,   522,
01717      505,     0,   390,   510,   512,   514,   565,   520,   565,   525,
01718      565,     0,   504,   453,     0,   436,   438,   442,   210,   211,
01719      378,   565,     0,   376,   375,   264,     0,    83,    77,     0,
01720        0,     0,     0,     0,   400,    61,     0,   406,     0,     0,
01721      244,   399,    59,   243,   335,   275,   565,   565,   415,   565,
01722      338,   565,   340,   298,   339,   301,     0,     0,   304,   547,
01723      279,   554,   543,   544,     0,     0,   488,     0,     0,   104,
01724      105,   108,   554,     0,   554,   505,     0,     0,     0,   397,
01725       54,   396,    53,     0,     0,     0,   565,   120,   261,   250,
01726        0,     0,   406,     0,     0,   554,    11,   240,    87,    89,
01727        0,   511,     0,   358,   349,   351,   554,   347,   565,     0,
01728        0,   388,     0,   497,   530,     0,   500,   524,     0,   502,
01729      528,     0,   455,   456,   457,   451,   458,   511,     0,   565,
01730        0,   565,   518,   565,   565,   374,   380,     0,     0,   262,
01731       75,   192,     0,    37,   198,    36,   199,    62,   557,     0,
01732       34,   196,    35,   197,    60,   416,   417,   565,   418,     0,
01733      565,   343,     0,     0,   341,     0,     0,     0,   303,     0,
01734        0,   406,     0,   311,     0,     0,   406,   314,   533,   554,
01735        0,   490,   318,     0,     0,   194,     0,     0,   288,   516,
01736      554,     0,   356,     0,   513,   554,     0,     0,   515,   565,
01737      565,   529,   565,   521,   565,   565,     0,     0,   384,   381,
01738      382,   385,     0,   377,   365,   367,     0,   370,     0,   372,
01739      394,   263,   235,    33,   195,     0,     0,   420,   344,     0,
01740       12,   422,     0,   295,   296,     0,     0,   260,   565,   306,
01741        0,   487,   309,   489,   316,   505,   410,   408,     0,   348,
01742      359,     0,   354,   350,   389,   392,   391,     0,   493,     0,
01743      495,     0,   501,     0,   498,   503,   454,     0,   517,     0,
01744      379,   565,   565,   565,   519,   565,   565,     0,   419,     0,
01745       96,   103,     0,   421,     0,   299,   302,   412,   413,   411,
01746        0,     0,     0,    56,     0,   357,     0,   352,   565,   565,
01747      565,   565,   280,     0,   383,     0,   362,     0,   364,   371,
01748        0,   368,   373,   102,     0,   565,     0,   565,   565,     0,
01749      312,     0,   355,     0,   494,     0,   491,   496,   499,   547,
01750      279,   565,   565,   565,   565,   547,   101,   554,   543,   544,
01751      414,   342,   307,   319,   353,   565,   363,     0,   360,   366,
01752      369,   406,   492,   565,   361
01753 };
01754 
01755 /* YYDEFGOTO[NTERM-NUM].  */
01756 static const yytype_int16 yydefgoto[] =
01757 {
01758       -1,     1,     2,    64,    65,    66,   226,   529,   530,   241,
01759      242,   413,    68,   335,    69,    70,   573,   706,    71,    72,
01760      243,    73,    74,    75,   441,    76,   200,   353,   354,   184,
01761      185,   186,   187,   574,   526,   189,    78,   415,   202,   247,
01762      519,   661,   404,   405,   215,   216,   204,   391,   205,   480,
01763       79,   333,   427,   592,   337,   786,   338,   787,   684,   910,
01764      688,   685,   860,   556,   558,   698,   865,   234,    81,    82,
01765       83,    84,    85,    86,    87,    88,    89,    90,   665,   532,
01766      673,   783,   784,   346,   724,   725,   726,   749,   642,   643,
01767      750,   829,   830,   264,   265,   446,   621,   731,   297,   475,
01768       91,    92,   382,   567,   566,   539,   909,   667,   777,   846,
01769      850,    93,    94,    95,    96,    97,    98,    99,   276,   459,
01770      100,   278,   272,   270,   274,   451,   634,   633,   741,   745,
01771      101,   271,   102,   103,   207,   105,   208,   209,   551,   687,
01772      696,   697,   623,   624,   625,   626,   627,   752,   753,   628,
01773      629,   630,   631,   821,   733,   371,   557,   252,   210,   211,
01774      108,   596,   521,   561,   286,   401,   402,   657,   431,   533,
01775      341,   245
01776 };
01777 
01778 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
01779    STATE-NUM.  */
01780 #define YYPACT_NINF -778
01781 static const yytype_int16 yypact[] =
01782 {
01783     -778,   133,  2394,  -778,  7010,  -778,  -778,  -778,  6523,  -778,
01784     -778,  -778,  -778,  -778,  -778,  -778,  7228,  7228,  -778,  -778,
01785     7228,  3145,  2722,  -778,  -778,  -778,  -778,   164,  6384,   -11,
01786     -778,    69,  -778,  -778,  -778,  5623,  2863,  -778,  -778,  5750,
01787     -778,  -778,  -778,  -778,  -778,  -778,  8427,  8427,    96,  4342,
01788     8536,  7446,  7773,  6786,  -778,  6245,  -778,  -778,  -778,    74,
01789       93,   122,  8645,  8427,  -778,   187,  -778,   698,   288,  -778,
01790     -778,   230,   167,  -778,   180,  8754,  -778,   234,  2846,   273,
01791      310,  -778,  8536,  8536,  -778,  -778,  4986,  8859,  8964,  9069,
01792     5496,    16,    60,  -778,  -778,   174,  -778,  -778,  -778,  -778,
01793     -778,  -778,  -778,  -778,   201,  -778,   258,   282,   206,  -778,
01794     -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,
01795     -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,
01796     -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,
01797     -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,
01798     -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,
01799     -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,
01800     -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,
01801     -778,  -778,  -778,  -778,  -778,  -778,  -778,   212,  -778,  -778,
01802     -778,  -778,   215,  8427,   303,  4472,  8427,  8427,  8427,  -778,
01803      257,  2846,   285,  -778,  -778,   281,   343,    38,   337,   263,
01804      290,  -778,  -778,  -778,  4877,  -778,  7228,  7228,  -778,  -778,
01805     5116,  -778,  8536,   599,  -778,   296,   315,  4602,  -778,  -778,
01806     -778,   311,   328,  -778,   347,   206,   396,   446,  7119,  4342,
01807      329,   187,   698,   -11,   370,  -778,   288,   339,   -30,    30,
01808     -778,   285,   356,    30,  -778,   -11,   442,   375,  9174,   390,
01809     -778,   351,   373,   383,  -778,  -778,  -778,  -778,  -778,  -778,
01810      515,  -778,   552,   587,   620,   397,   607,   407,    34,   473,
01811      474,  -778,  -778,  -778,  -778,  -778,  -778,  -778,  5225,  8536,
01812     8536,  8536,  8536,  7119,  8536,  8536,  -778,  -778,  7882,  -778,
01813     4342,  6898,   413,  7882,  8427,  8427,  8427,  8427,  8427,  8427,
01814     8427,  8427,  8427,  8427,  8427,  8427,  8427,  8427,  8427,  8427,
01815     8427,  8427,  8427,  8427,  8427,  8427,  8427,  8427,  8427,  8427,
01816     1712,  7228,  2060,  3517,   288,    80,    80,  8536,  8536,   187,
01817      534,   416,   516,  -778,  -778,   386,   568,    50,    72,   301,
01818      321,  8536,   363,  -778,    66,   393,  -778,  -778,  -778,    36,
01819       41,   103,   224,   259,   266,   322,   348,   369,  -778,  -778,
01820     -778,   377, 10211, 10211,  -778,  -778,  -778,  -778,  8645,  8645,
01821     -778,   483,  -778,  -778,  -778,   268,  -778,  -778,  8427,  8427,
01822     7337,  -778,  -778,  2216,  7228,  9441,  8427,  8427,  7555,  -778,
01823      -11,   454,  -778,  -778,   -11,  -778,  -778,    70,  -778,  -778,
01824     -778,  -778,  -778,  6523,  -778,  8427,  3937,   463,  2216,  9441,
01825     8427,   698,   -11,  -778,  -778,  5353,   462,   -11,  -778,  7664,
01826     -778,  -778,  7773,  -778,  -778,  -778,   296,   411,  -778,  -778,
01827     -778,   467,  9174,  9518,  7228,  9595,  1033,  -778,  -778,  -778,
01828     -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,    39,
01829     -778,  -778,   472,  -778,  8427,  8427,  -778,  -778,  -778,  -778,
01830     -778,  -778,  -778,  -778,  -778,    28,  8427,  -778,   468,   487,
01831     -778,   -11,  9174,   496,  -778,  -778,  1576,  -778,  -778,   396,
01832     1512,  1512,  1512,  1512,  1223,  1223,  1879,  2079,  1512,  1512,
01833     2146,  2146,   582,   582,  2705,  1223,  1223,  1098,  1098,   790,
01834      514,   514,   396,   396,   396,  3286,  5991,  3372,  6105,  -778,
01835      328,  -778,   -11,   448,  -778,   451,  -778,  -778,  3004,   639,
01836      644,  -778,  3662,   646,  4082,    42,    42,   534,  7991,   639,
01837      109,  9672,  7228,  9749,  -778,   288,  -778,   411,  -778,   187,
01838     -778,  -778,  -778,  9826,  7228,  9903,  3517,  8536,  1115,  -778,
01839     -778,  -778,  -778,  -778,  1235,  1235,    28,    28,  -778, 10270,
01840     -778,  2846,  -778,  -778,  6523, 10289,  -778,  8427,   285,  -778,
01841      290,  5877,  2581,   -11,   410,   529,  -778,  -778,  -778,  -778,
01842     -778,  -778,  8536,  2846,   535,  -778,   328,   328,  2846,    20,
01843      698,  -778,    30,  9174,   467,   338,   271,   -11,   228,   261,
01844      557,  -778,  -778,  -778,  -778,   666,  -778,  -778,  -778,  -778,
01845      923,    43,  -778,  -778,  -778,  -778,   543,  -778,   544,   623,
01846      547,   642,  -778,  -778,   722,  -778,  -778,  -778,   396,   396,
01847     -778,   904,  4747,  -778,  -778,   555,  8100,  -778,   467,  9174,
01848     8427,   598,  8645,  8645,  -778,   483,   570,   538,  8645,  8645,
01849     -778,  -778,   483,  -778,  -778,  -778,  8209,   701,  -778,   441,
01850     -778,   701,  -778,  -778,  -778,  -778,   639,    31,  -778,   110,
01851      132,   -11,   126,   144,  8536,   187,  -778,  8536,  3517,   338,
01852      271,  -778,   -11,   639,    70,   923,  3517,   187,  6662,  -778,
01853     -778,  -778,  -778,  4747,  4602,  8427,    28,  -778,  -778,  -778,
01854     8427,  8427,   536,  8427,  8427,    70,  -778,  -778,  -778,   251,
01855     8427,  -778,   666,   450,  -778,   579,   -11,  -778,   583,  4747,
01856     4602,  -778,   923,  -778,  -778,   923,  -778,  -778,   779,  -778,
01857     -778,  4602,  -778,  -778,  -778,  -778,  -778,   625,   809,   583,
01858      615,   595,  -778,   604,   605,  -778,  -778,   740,  8427,   619,
01859      467,  2846,  8427,  -778,  2846,  -778,  2846,  -778,  -778,  8645,
01860     -778,  2846,  -778,  2846,  -778,   468,  -778,   675,  -778,  4212,
01861      757,  -778,  8536,   639,  -778,   639,  4747,  4747,  -778,  8318,
01862     3807,   147,    42,  -778,   187,   639,  -778,  -778,  -778,   -11,
01863      639,  -778,  -778,   759,   630,  2846,  4602,  8427,  -778,  -778,
01864      -11,   845,   632,   826,  -778,   -11,   760,   637,  -778,   640,
01865      643,  -778,   647,  -778,   651,   647,   656,  9279,  -778,   657,
01866     -778,  -778,   682,  -778,  1199,  -778,  1199,  -778,   779,  -778,
01867     -778,   658,  2846,  -778,  2846,  9384,    80,  -778,  -778,  4747,
01868     -778,  -778,    80,  -778,  -778,   639,   639,  -778,   115,  -778,
01869     3517,  -778,  -778,  -778,  -778,  1115,  -778,  -778,   664,  -778,
01870      662,   845,   491,  -778,  -778,  -778,  -778,   923,  -778,   779,
01871     -778,   779,  -778,   779,  -778,  -778,  -778,   751,   429,   809,
01872     -778,   672,   673,   647,  -778,   679,   647,   765,  -778,   432,
01873      373,   383,  3517,  -778,  3662,  -778,  -778,  -778,  -778,  -778,
01874     4747,   639,  3517,  -778,   845,   662,   845,   685,   647,   686,
01875      647,   647,  -778,  9980,  -778,  1199,  -778,   779,  -778,  -778,
01876      779,  -778,  -778,   411, 10057,  7228, 10134,   644,   441,   639,
01877     -778,   639,   662,   845,  -778,   779,  -778,  -778,  -778,   688,
01878      690,   647,   687,   647,   647,    81,   271,   -11,    86,   118,
01879     -778,  -778,  -778,  -778,   662,   647,  -778,   779,  -778,  -778,
01880     -778,   124,  -778,   647,  -778
01881 };
01882 
01883 /* YYPGOTO[NTERM-NUM].  */
01884 static const yytype_int16 yypgoto[] =
01885 {
01886     -778,  -778,  -778,   399,  -778,    33,  -778,  -530,   -33,  -778,
01887      159,  -778,    23,   -55,    21,  -778,  -462,  -778,   -15,   741,
01888     -136,    -1,   -66,  -778,  -403,   -26,  1181,  -306,   750,   -52,
01889     -778,   -20,  -778,  -778,    32,  -778,   748,  -778,   540,  -778,
01890       46,   -98,  -298,    54,    76,  -778,  -278,  -196,   -44,  -283,
01891       27,  -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,
01892     -778,  -778,  -778,  -778,  -778,  -778,  -778,     2,  -778,  -778,
01893     -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,   298,  -323,
01894     -512,   -97,  -610,  -778,  -755,  -748,   120,  -778,  -485,  -778,
01895     -636,  -778,   -49,  -778,  -778,  -778,  -778,  -778,  -778,  -778,
01896     -778,  -778,   752,  -778,  -778,  -520,  -778,   -92,  -778,  -778,
01897     -778,  -778,  -778,  -778,   753,  -778,  -778,  -778,  -778,  -778,
01898     -778,  -778,  -778,   792,  -778,  -229,  -778,  -778,  -778,  -778,
01899        7,  -778,    13,  -778,  1031,   762,  1198,  1109,  -778,  -778,
01900      -12,  -416,  -706,  -549,  -667,  -121,  -679,  -777,    25,   128,
01901     -778,  -579,  -778,  -434,   531,  -778,  -778,  -778,   -41,  -287,
01902     1927,  -254,  -778,  -778,   -32,    -4,    88,  -554,  -217,    63,
01903      -31,    -2
01904 };
01905 
01906 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
01907    positive, shift that token.  If negative, reduce the rule which
01908    number is the opposite.  If zero, do what YYDEFACT says.
01909    If YYTABLE_NINF, syntax error.  */
01910 #define YYTABLE_NINF -566
01911 static const yytype_int16 yytable[] =
01912 {
01913      109,   199,   199,   269,    80,   199,    80,   248,   224,   302,
01914      249,   253,   632,   534,   399,   190,   240,   676,   206,   206,
01915      488,   191,   206,   222,   675,   225,   693,   259,   336,   712,
01916      622,   339,   433,   522,   288,   190,   435,   110,   369,   604,
01917      188,   191,   831,   453,   531,   456,   548,   460,   244,   250,
01918      254,    80,   206,   719,   340,   261,   823,   780,   873,   894,
01919      188,   785,   754,   870,   206,   818,   727,   549,   218,   672,
01920      203,   212,   729,   246,   213,   -96,   520,   261,   528,   648,
01921      260,   703,   704,   281,   206,   206,   374,   188,   206,   345,
01922      355,   355,   815,   531,   -99,   462,   583,  -103,   219,   -98,
01923      447,   372,   260,   422,   640,   334,   334,   294,   295,   334,
01924      429,   586,   579,   832,   260,   260,   260,   430,   564,   565,
01925      579,  -475,   188,   915,   632,  -482,  -474,   791,   287,   -69,
01926      779,  -100,   538,     3,  -102,   -99,   221,   -97,   796,   520,
01927      463,   528,   641,   448,   449,   586,   607,   -96,   894,   287,
01928      730,   -98,   237,   820,   380,   373,   824,  -101,   795,   873,
01929      -83,    67,   240,    67,   481,   597,   800,   818,   942,  -100,
01930      432,   789,   -97,   727,   812,  -475,   284,   430,   285,   550,
01931     -474,   279,   280,   831,   381,   635,   632,   284,  -476,   285,
01932      -88,   597,   440,   767,   417,   964,   375,    80,   823,   199,
01933      774,   199,   199,   392,   728,   227,   240,   755,   392,   424,
01934      425,   284,   -95,   285,   818,   406,   206,   221,   206,   206,
01935      275,   806,   206,  -543,   206,   284,   -99,   285,   -99,    80,
01936      636,   -98,   374,   -98,   468,   469,   470,   471,   244,   277,
01937       80,    80,  -476,   407,   681,   409,   760,   691,   907,   -94,
01938      -91,   436,  -543,   -90,   479,   892,   692,   895,   296,   479,
01939      261,   632,   727,  -100,   727,  -100,   -90,   240,   400,   -97,
01940      403,   -97,   -93,    56,  -544,   483,   298,  -406,   218,   799,
01941      859,   380,   535,   536,   -92,   260,   -92,   -89,  -482,   597,
01942       80,   206,   206,   206,   206,    80,   206,   206,   919,   244,
01943      206,   597,    80,   261,   287,   206,   220,   537,   408,  -477,
01944      -96,   221,   334,   334,   334,   334,   199,   473,   474,   477,
01945      299,   467,   727,   917,   485,   294,   295,  -540,   260,   406,
01946      911,   426,   284,   206,   285,    80,  -406,   -90,   908,   206,
01947      206,   -88,   375,   303,  -479,   378,   952,  -541,   217,   580,
01948      397,  -478,   383,   206,   790,   420,  -279,   220,  -324,   385,
01949      334,   334,   518,  -477,  -547,   727,   388,   727,   -90,   379,
01950      -92,   -90,  -103,   389,   545,   -90,   440,  -102,   527,   199,
01951      206,   206,   941,   776,   709,   717,  -469,  -406,   602,  -406,
01952     -406,  -103,   406,   591,   727,   330,   206,   421,  -479,   568,
01953      570,   -92,   287,   971,   -92,  -478,  -472,  -480,   -92,  -279,
01954     -279,  -324,  -324,  -544,   109,   546,   440,   552,    80,   547,
01955      190,   390,   -95,  -547,   396,   518,   191,    80,   393,   199,
01956      398,   632,   418,  -469,   438,   439,   443,  -540,   414,  -469,
01957     -469,   527,   406,  -540,   261,   188,   206,    67,   331,   332,
01958      518,   416,   472,   214,  -472,   782,   779,  -541,  -481,  -472,
01959     -472,  -480,   559,  -541,   304,   527,   699,   701,  -272,   260,
01960      217,   541,   423,   644,  -547,   518,  -547,  -547,   553,   -68,
01961     -543,   394,   395,   428,   261,   394,   419,  -469,   587,   444,
01962      445,   527,   589,   434,   677,   590,  -280,   713,   437,   669,
01963      651,   671,   721,   457,   611,   612,   613,   614,  -472,   260,
01964      599,  -481,  -481,   461,   923,   601,   560,   934,   656,   -98,
01965      751,  -272,  -272,   902,   542,   543,   663,   199,   668,   904,
01966      442,   554,   555,   420,    80,   658,    80,   718,   659,   199,
01967      406,   464,   465,   721,   206,   611,   612,   613,   614,  -280,
01968     -280,   538,   406,   484,   707,  -102,   206,   -98,    80,   206,
01969     -100,   466,   663,   663,   644,   644,   654,   554,   555,   647,
01970      935,   936,   540,   518,   660,    67,   447,   572,   392,   656,
01971      694,   190,   304,   440,   600,   518,   -94,   191,   -90,   527,
01972      811,   -92,   251,   544,   206,   663,   655,   588,   674,   674,
01973      595,   527,   -83,   656,   662,   261,   188,   603,  -258,   757,
01974      660,   660,   686,   447,   822,   715,   714,   825,   637,   448,
01975      449,   450,   479,   807,   734,   769,   734,   646,   734,   792,
01976      260,   916,   794,   327,   328,   329,   649,   957,  -100,   756,
01977      700,   702,   654,   660,    80,   -97,   802,   -97,   447,   664,
01978      304,   261,   666,   410,   206,   206,   448,   449,   452,   670,
01979      206,   206,   411,   412,   778,   781,   720,   781,   447,   781,
01980      803,   804,   716,   763,   765,   737,   260,   656,   -89,   770,
01981      772,   447,   597,   732,   735,   455,   206,   738,   656,   206,
01982       80,   448,   449,   454,   740,  -259,   816,   817,    80,   325,
01983      326,   327,   328,   329,   644,    80,    80,   334,   826,   762,
01984      334,   448,   449,   458,   768,   893,   779,   896,   721,   813,
01985      611,   612,   613,   614,   448,   449,   756,   852,   748,   833,
01986      188,    80,    80,   384,   827,   834,   386,   387,   289,   290,
01987      291,   292,   293,    80,   836,   838,   848,   756,   793,   734,
01988      840,   734,   734,   855,   856,   722,   918,   858,   920,  -260,
01989      801,   723,   921,   845,   201,   201,   849,   867,   201,   866,
01990      875,   206,   871,   868,   876,   847,   742,   743,   851,   744,
01991      877,    80,   798,   879,   206,    44,    45,   881,    80,    80,
01992      843,   883,    80,   886,   233,   236,   890,   889,  -261,   201,
01993      201,   913,   914,   808,   951,   334,   953,   922,    80,   954,
01994      282,   283,   925,   927,   814,   594,   903,   734,   734,   930,
01995      734,   933,   734,   734,   965,   943,   945,   967,   343,   888,
01996     -543,   721,  -544,   611,   612,   613,   614,   678,   478,   358,
01997      924,   961,   810,   487,   376,   960,   973,   899,   377,   273,
01998        0,    80,   370,   912,   260,   674,   781,   861,   304,   891,
01999      819,   828,    80,   611,   612,   613,   614,     0,   615,   937,
02000        0,   938,   260,   317,   318,   617,     0,   939,   721,     0,
02001      611,   612,   613,   614,     0,     0,     0,   863,     0,   734,
02002      734,   734,     0,   734,   734,   618,     0,   721,   869,   611,
02003      612,   613,   614,   874,    80,     0,    80,   325,   326,   327,
02004      328,   329,    80,     0,    80,   722,   734,   734,   734,   734,
02005      199,   872,     0,     0,     0,     0,     0,     0,     0,   576,
02006      578,     0,     0,   406,   722,   668,   781,   206,   251,     0,
02007        0,   201,     0,     0,   201,   201,   282,     0,     0,   734,
02008      734,   734,   734,   656,     0,   518,   747,     0,   611,   612,
02009      613,   614,   201,   734,   201,   201,   518,     0,     0,   578,
02010        0,   734,   251,     0,   788,   610,     0,   611,   612,   613,
02011      614,     0,   527,     0,     0,     0,     0,     0,     0,     0,
02012        0,   797,     0,   615,     0,     0,     0,     0,     0,   616,
02013      617,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02014        0,     0,   615,     0,     0,     0,   645,     0,   616,   617,
02015      618,     0,     0,   619,     0,     0,     0,     0,     0,     0,
02016        0,     0,     0,   104,     0,   104,     0,     0,     0,   618,
02017        0,     0,   619,     0,     0,     0,   201,     0,     0,   748,
02018        0,   486,   489,   490,   491,   492,   493,   494,   495,   496,
02019      497,   498,   499,   500,   501,   502,   503,   504,   505,   506,
02020      507,   508,   509,   510,   511,   512,   513,   514,   487,   201,
02021      104,   853,     0,   854,   262,   610,     0,   611,   612,   613,
02022      614,     0,     0,   862,     0,     0,     0,     0,   864,     0,
02023        0,     0,     0,     0,     0,     0,   262,     0,     0,     0,
02024        0,   107,     0,   107,     0,     0,     0,   708,   347,   356,
02025      356,   356,   615,     0,     0,     0,   569,   571,   616,   617,
02026        0,     0,     0,     0,     0,     0,   575,   201,   201,     0,
02027        0,     0,   201,     0,   569,   571,   201,     0,     0,   618,
02028        0,     0,   619,   905,   906,     0,     0,     0,   107,   736,
02029        0,   739,   263,   593,     0,     0,   304,   610,   598,   611,
02030      612,   613,   614,     0,     0,   620,     0,   201,     0,     0,
02031      201,   317,   318,    77,   263,    77,   759,     0,     0,     0,
02032        0,     0,   201,     0,     0,     0,   348,   357,   357,     0,
02033      106,     0,   106,     0,   615,     0,   775,     0,     0,   940,
02034      616,   617,   638,   639,   324,   325,   326,   327,   328,   329,
02035        0,     0,     0,     0,   201,     0,   104,     0,     0,     0,
02036       77,   618,     0,     0,   619,  -565,     0,   962,     0,   963,
02037        0,     0,     0,  -565,  -565,  -565,     0,   106,  -565,  -565,
02038     -565,   747,  -565,   611,   612,   613,   614,   695,   104,     0,
02039      809,     0,  -565,     0,     0,     0,     0,     0,   344,   104,
02040      104,     0,  -565,  -565,     0,  -565,  -565,  -565,  -565,  -565,
02041        0,     0,   835,     0,   837,   839,   201,     0,   615,   262,
02042      201,   304,     0,     0,   616,   617,     0,     0,   841,     0,
02043        0,     0,   201,     0,   107,     0,   317,   318,     0,     0,
02044        0,     0,     0,     0,     0,   618,     0,     0,   619,   104,
02045     -565,     0,     0,     0,   104,   201,     0,     0,     0,   857,
02046        0,   104,   262,     0,     0,     0,   107,   322,   323,   324,
02047      325,   326,   327,   328,   329,     0,     0,   107,   107,     0,
02048      878,   880,     0,   882,     0,   884,   885,     0,     0,     0,
02049        0,     0,     0,     0,   104,     0,     0,   263,     0,     0,
02050        0,     0,  -565,     0,  -565,     0,    77,   217,  -565,     0,
02051     -565,     0,  -565,     0,     0,     0,     0,     0,     0,     0,
02052        0,     0,     0,   106,   201,     0,     0,   107,   761,     0,
02053      764,   766,   107,     0,     0,     0,   771,   773,    77,   107,
02054      263,     0,     0,     0,   201,     0,     0,     0,     0,    77,
02055       77,     0,   926,   928,   929,   106,   931,   932,     0,     0,
02056        0,     0,     0,     0,     0,     0,   106,   106,     0,     0,
02057        0,     0,   107,     0,     0,     0,     0,   104,     0,   944,
02058      946,   947,   948,   805,     0,     0,   104,     0,   764,   766,
02059        0,   771,   773,     0,     0,     0,     0,     0,   201,    77,
02060        0,     0,     0,   262,    77,     0,     0,     0,     0,     0,
02061        0,    77,   966,   968,   969,   970,   106,     0,     0,     0,
02062        0,   106,     0,     0,     0,     0,   972,     0,   106,     0,
02063        0,     0,     0,     0,   974,     0,   201,     0,     0,     0,
02064      842,     0,     0,   262,    77,     0,     0,   844,     0,     0,
02065        0,     0,     0,     0,     0,   107,     0,     0,     0,     0,
02066        0,   106,     0,     0,   107,     0,     0,   201,     0,     0,
02067        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02068        0,   263,     0,     0,     0,   844,     0,     0,     0,     0,
02069        0,     0,     0,   104,     0,   104,     0,     0,     0,     0,
02070        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02071      304,  -566,  -566,  -566,  -566,   309,   310,   104,     0,  -566,
02072     -566,   263,     0,     0,     0,   317,   318,    77,     0,     0,
02073        0,     0,     0,     0,     0,     0,    77,     0,     0,     0,
02074        0,     0,     0,     0,   106,     0,     0,     0,     0,     0,
02075      650,     0,     0,   106,   320,   321,   322,   323,   324,   325,
02076      326,   327,   328,   329,   262,     0,     0,     0,     0,     0,
02077        0,   107,     0,   107,   304,   305,   306,   307,   308,   309,
02078      310,   311,   312,   313,   314,   315,   316,     0,     0,   317,
02079      318,     0,     0,     0,     0,   107,     0,     0,     0,     0,
02080        0,     0,     0,   104,     0,     0,     0,     0,     0,     0,
02081      262,     0,     0,   201,     0,     0,   319,     0,   320,   321,
02082      322,   323,   324,   325,   326,   327,   328,   329,     0,     0,
02083        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02084        0,     0,   263,    77,     0,    77,  -237,     0,     0,   104,
02085        0,     0,     0,     0,     0,     0,     0,   104,     0,     0,
02086      106,     0,   106,     0,   104,   104,     0,    77,     0,     0,
02087        0,     0,     0,   746,     0,     0,     0,     0,     0,     0,
02088        0,   107,     0,     0,   106,     0,     0,     0,   263,     0,
02089      104,   104,     0,     0,   515,   516,     0,     0,   517,     0,
02090        0,     0,   104,     0,     0,     0,     0,     0,   155,   156,
02091      157,   158,   159,   160,   161,   162,   163,     0,     0,   164,
02092      165,     0,     0,   166,   167,   168,   169,   107,     0,     0,
02093        0,     0,     0,     0,     0,   107,     0,   170,     0,     0,
02094      104,     0,   107,   107,     0,     0,     0,   104,   104,     0,
02095        0,   104,     0,    77,   171,   172,   173,   174,   175,   176,
02096      177,   178,   179,   180,     0,   181,   182,   104,   107,   107,
02097      106,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02098      107,     0,     0,   183,   217,     0,     0,     0,   356,     0,
02099        0,     0,     0,     0,     0,     0,     0,     0,     0,    77,
02100        0,     0,     0,     0,     0,     0,   900,    77,     0,     0,
02101      104,     0,     0,     0,    77,    77,   106,     0,   107,     0,
02102        0,   104,     0,     0,   106,   107,   107,     0,     0,   107,
02103        0,   106,   106,     0,     0,     0,     0,     0,     0,     0,
02104       77,    77,     0,     0,     0,   107,     0,     0,     0,     0,
02105        0,     0,    77,     0,     0,     0,     0,   106,   106,     0,
02106        0,     0,     0,   104,     0,   104,   357,     0,     0,   106,
02107        0,   104,     0,   104,     0,     0,     0,   304,   305,   306,
02108      307,   308,   309,   310,   901,     0,   313,   314,   107,     0,
02109       77,     0,   317,   318,     0,     0,     0,    77,    77,   107,
02110        0,    77,     0,   235,   235,     0,     0,   106,   235,   235,
02111      235,     0,     0,     0,   106,   106,     0,    77,   106,     0,
02112      235,   320,   321,   322,   323,   324,   325,   326,   327,   328,
02113      329,     0,   235,     0,   106,     0,     0,     0,     0,     0,
02114        0,   107,     0,   107,   235,   235,   235,     0,     0,   107,
02115        0,   107,     0,     0,     0,     0,   898,     0,     0,     0,
02116       77,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02117        0,    77,     0,     0,     0,     0,     0,   106,     0,     0,
02118        0,     0,     0,     0,     0,     0,     0,     0,   106,     0,
02119        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02120        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02121        0,     0,     0,    77,     0,    77,     0,     0,     0,     0,
02122        0,    77,     0,    77,     0,     0,     0,     0,     0,     0,
02123      106,     0,   106,     0,     0,     0,     0,     0,   106,     0,
02124      106,     0,   523,   524,     0,     0,   525,     0,     0,     0,
02125      235,     0,     0,   235,   235,   235,   155,   156,   157,   158,
02126      159,   160,   161,   162,   163,     0,     0,   164,   165,     0,
02127        0,   166,   167,   168,   169,     0,     0,   304,   305,   306,
02128      307,   308,   309,   310,   311,   170,   313,   314,     0,     0,
02129        0,     0,   317,   318,     0,     0,     0,     0,     0,     0,
02130        0,     0,   171,   172,   173,   174,   175,   176,   177,   178,
02131      179,   180,     0,   181,   182,   235,     0,     0,     0,     0,
02132        0,   320,   321,   322,   323,   324,   325,   326,   327,   328,
02133      329,   183,   217,     0,     0,     0,     0,     0,     0,     0,
02134        0,     0,     0,     0,   304,   305,   306,   307,   308,   309,
02135      310,   311,   312,   313,   314,  -566,  -566,     0,   235,   317,
02136      318,   235,   235,   235,   235,   235,   235,   235,   235,   235,
02137      235,   235,   235,   235,   235,   235,   235,   235,   235,   235,
02138      235,   235,   235,   235,   235,   235,   235,     0,   320,   321,
02139      322,   323,   324,   325,   326,   327,   328,   329,   581,   516,
02140        0,     0,   582,     0,     0,     0,     0,     0,     0,     0,
02141        0,     0,   155,   156,   157,   158,   159,   160,   161,   162,
02142      163,     0,     0,   164,   165,     0,     0,   166,   167,   168,
02143      169,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02144        0,   170,     0,     0,     0,   235,   235,   235,     0,     0,
02145        0,     0,     0,   235,   235,   235,     0,     0,   171,   172,
02146      173,   174,   175,   176,   177,   178,   179,   180,     0,   181,
02147      182,     0,   235,     0,     0,     0,     0,   235,     0,     0,
02148        0,     0,     0,     0,     0,     0,   235,   183,   217,   235,
02149        0,     0,     0,     0,     0,     0,     0,     0,     0,   235,
02150        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02151        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02152        0,   235,   235,     0,  -565,     4,     0,     5,     6,     7,
02153        8,     9,     0,   235,     0,    10,    11,     0,     0,   235,
02154       12,     0,    13,    14,    15,    16,    17,    18,    19,     0,
02155        0,     0,     0,     0,    20,    21,    22,    23,    24,    25,
02156       26,     0,     0,    27,     0,     0,     0,     0,     0,    28,
02157       29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
02158       39,    40,     0,    41,    42,     0,    43,    44,    45,     0,
02159       46,    47,     0,     0,     0,   235,     0,     0,     0,     0,
02160        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02161       48,     0,     0,    49,    50,     0,    51,    52,     0,    53,
02162        0,    54,    55,    56,    57,    58,    59,    60,     0,     0,
02163        0,     0,     0,     0,   235,     0,     0,     0,     0,     0,
02164        0,     0,     0,     0,     0,     0,    61,    62,    63,     0,
02165        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02166      235,     0,     0,     0,     0,     0,     0,     0,     0,  -565,
02167        0,  -565,     0,     0,     0,     0,     0,     0,     0,     0,
02168        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02169        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02170        0,     0,     0,   235,     0,     0,   235,   235,     0,     0,
02171        0,  -279,     0,     0,     0,     0,     0,     0,     0,  -279,
02172     -279,  -279,     0,   235,  -279,  -279,  -279,     0,  -279,     0,
02173        0,     0,     0,     0,     0,     0,     0,     0,  -279,  -279,
02174     -279,     0,     0,     0,     0,     0,     0,     0,  -279,  -279,
02175        0,  -279,  -279,  -279,  -279,  -279,     0,     0,     0,     0,
02176        0,     0,   235,     0,     0,     0,     0,   235,   235,     0,
02177      235,   235,     0,     0,     0,     0,     0,   235,     0,  -279,
02178     -279,  -279,  -279,  -279,  -279,  -279,  -279,  -279,  -279,  -279,
02179     -279,  -279,     0,     0,  -279,  -279,  -279,     0,   711,  -279,
02180        0,     0,     0,     0,     0,  -279,     0,     0,     0,     0,
02181        0,     0,     0,     0,     0,   235,     0,     0,  -279,   235,
02182     -101,  -279,  -279,  -279,  -279,  -279,  -279,  -279,  -279,  -279,
02183     -279,  -279,  -279,     0,     0,     0,     0,     0,     0,     0,
02184        0,     0,     0,     0,     0,     0,   235,     0,  -279,  -279,
02185     -279,  -279,  -405,     0,  -279,  -279,  -279,     0,  -279,     0,
02186     -405,  -405,  -405,     0,   235,  -405,  -405,  -405,     0,  -405,
02187        0,     0,     0,     0,     0,     0,     0,     0,  -405,  -405,
02188     -405,     0,     0,     0,   235,     0,     0,     0,     0,  -405,
02189     -405,     0,  -405,  -405,  -405,  -405,  -405,     0,     0,     0,
02190        0,     0,   235,   304,   305,   306,   307,   308,   309,   310,
02191      311,   312,   313,   314,   315,   316,     0,     0,   317,   318,
02192     -405,  -405,  -405,  -405,  -405,  -405,  -405,  -405,  -405,  -405,
02193     -405,  -405,  -405,     0,     0,  -405,  -405,  -405,     0,     0,
02194     -405,     0,     0,     0,     0,   319,  -405,   320,   321,   322,
02195      323,   324,   325,   326,   327,   328,   329,     0,     0,     0,
02196        0,     0,  -405,     0,  -405,  -405,  -405,  -405,  -405,  -405,
02197     -405,  -405,  -405,  -405,     0,     0,     0,     0,     0,     0,
02198        0,     0,   221,     0,     0,     0,     0,     0,  -405,  -405,
02199     -405,  -405,  -405,  -273,   217,  -405,  -405,  -405,     0,  -405,
02200        0,  -273,  -273,  -273,     0,     0,  -273,  -273,  -273,     0,
02201     -273,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02202     -273,  -273,  -273,     0,     0,     0,     0,     0,     0,     0,
02203     -273,  -273,     0,  -273,  -273,  -273,  -273,  -273,     0,     0,
02204        0,     0,     0,     0,   304,   305,   306,   307,   308,   309,
02205      310,   311,   312,   313,   314,   315,   316,     0,     0,   317,
02206      318,  -273,  -273,  -273,  -273,  -273,  -273,  -273,  -273,  -273,
02207     -273,  -273,  -273,  -273,     0,     0,  -273,  -273,  -273,     0,
02208        0,  -273,     0,     0,     0,     0,   319,  -273,   320,   321,
02209      322,   323,   324,   325,   326,   327,   328,   329,     0,     0,
02210     -273,     0,     0,  -273,  -273,  -273,  -273,  -273,  -273,  -273,
02211     -273,  -273,  -273,  -273,  -273,     0,     0,     0,     0,     0,
02212        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02213     -273,  -273,  -273,  -273,  -565,     0,  -273,  -273,  -273,     0,
02214     -273,     0,  -565,  -565,  -565,     0,     0,  -565,  -565,  -565,
02215        0,  -565,     0,     0,     0,     0,     0,     0,     0,     0,
02216     -565,  -565,  -565,     0,     0,     0,     0,     0,     0,     0,
02217        0,  -565,  -565,     0,  -565,  -565,  -565,  -565,  -565,     0,
02218        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02219        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02220        0,     0,  -565,  -565,  -565,  -565,  -565,  -565,  -565,  -565,
02221     -565,  -565,  -565,  -565,  -565,     0,     0,  -565,  -565,  -565,
02222        0,     0,  -565,     0,     0,     0,     0,     0,  -565,     0,
02223        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02224        0,     0,     0,     0,  -565,     0,  -565,  -565,  -565,  -565,
02225     -565,  -565,  -565,  -565,  -565,  -565,     0,     0,     0,     0,
02226        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02227     -565,  -565,  -565,  -565,  -565,  -286,   217,  -565,  -565,  -565,
02228        0,  -565,     0,  -286,  -286,  -286,     0,     0,  -286,  -286,
02229     -286,     0,  -286,     0,     0,     0,     0,     0,     0,     0,
02230        0,     0,  -286,  -286,     0,     0,     0,     0,     0,     0,
02231        0,     0,  -286,  -286,     0,  -286,  -286,  -286,  -286,  -286,
02232        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02233        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02234        0,     0,     0,  -286,  -286,  -286,  -286,  -286,  -286,  -286,
02235     -286,  -286,  -286,  -286,  -286,  -286,     0,     0,  -286,  -286,
02236     -286,     0,     0,  -286,     0,     0,     0,     0,     0,  -286,
02237        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02238        0,     0,     0,     0,     0,  -286,     0,  -286,  -286,  -286,
02239     -286,  -286,  -286,  -286,  -286,  -286,  -286,     0,     0,     0,
02240        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02241        0,     0,  -286,  -286,  -286,  -286,  -547,   214,  -286,  -286,
02242     -286,     0,  -286,     0,  -547,  -547,  -547,     0,     0,     0,
02243     -547,  -547,     0,  -547,     0,     0,     0,     0,     0,     0,
02244        0,     0,  -547,     0,     0,     0,     0,     0,     0,     0,
02245        0,     0,     0,  -547,  -547,     0,  -547,  -547,  -547,  -547,
02246     -547,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02247        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02248        0,     0,     0,     0,  -547,  -547,  -547,  -547,  -547,  -547,
02249     -547,  -547,  -547,  -547,  -547,  -547,  -547,     0,     0,  -547,
02250     -547,  -547,  -279,   652,     0,     0,     0,     0,     0,     0,
02251     -279,  -279,  -279,     0,     0,     0,  -279,  -279,     0,  -279,
02252        0,     0,     0,     0,     0,   -99,  -547,     0,  -547,  -547,
02253     -547,  -547,  -547,  -547,  -547,  -547,  -547,  -547,     0,  -279,
02254     -279,     0,  -279,  -279,  -279,  -279,  -279,     0,     0,     0,
02255        0,     0,  -547,  -547,  -547,  -547,   -91,     0,     0,  -547,
02256        0,  -547,     0,  -547,     0,     0,     0,     0,     0,     0,
02257     -279,  -279,  -279,  -279,  -279,  -279,  -279,  -279,  -279,  -279,
02258     -279,  -279,  -279,     0,     0,  -279,  -279,  -279,     0,   653,
02259        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02260        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02261        0,  -101,  -279,     0,  -279,  -279,  -279,  -279,  -279,  -279,
02262     -279,  -279,  -279,  -279,     0,     0,     0,     0,     0,     0,
02263        0,     0,     0,     0,     0,     0,     0,     0,     0,  -279,
02264     -279,  -279,   -93,     0,     0,  -279,     0,  -279,   238,  -279,
02265        5,     6,     7,     8,     9,  -565,  -565,  -565,    10,    11,
02266        0,     0,  -565,    12,     0,    13,    14,    15,    16,    17,
02267       18,    19,     0,     0,     0,     0,     0,    20,    21,    22,
02268       23,    24,    25,    26,     0,     0,    27,     0,     0,     0,
02269        0,     0,    28,    29,     0,    31,    32,    33,    34,    35,
02270       36,    37,    38,    39,    40,     0,    41,    42,     0,    43,
02271       44,    45,     0,    46,    47,     0,     0,     0,     0,     0,
02272        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02273        0,     0,     0,    48,     0,     0,    49,    50,     0,    51,
02274       52,     0,    53,     0,    54,    55,    56,    57,    58,    59,
02275       60,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02276        0,     0,     0,     0,     0,     0,     0,     0,     0,    61,
02277       62,    63,     0,     0,     0,     0,     0,     0,     0,     0,
02278        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02279        0,     0,  -565,   238,  -565,     5,     6,     7,     8,     9,
02280        0,     0,  -565,    10,    11,     0,  -565,  -565,    12,     0,
02281       13,    14,    15,    16,    17,    18,    19,     0,     0,     0,
02282        0,     0,    20,    21,    22,    23,    24,    25,    26,     0,
02283        0,    27,     0,     0,     0,     0,     0,    28,    29,     0,
02284       31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
02285        0,    41,    42,     0,    43,    44,    45,     0,    46,    47,
02286        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02287        0,     0,     0,     0,     0,     0,     0,     0,    48,     0,
02288        0,    49,    50,     0,    51,    52,     0,    53,     0,    54,
02289       55,    56,    57,    58,    59,    60,     0,     0,     0,     0,
02290        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02291        0,     0,     0,     0,    61,    62,    63,     0,     0,     0,
02292        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02293        0,     0,     0,     0,     0,     0,     0,  -565,   238,  -565,
02294        5,     6,     7,     8,     9,     0,     0,  -565,    10,    11,
02295        0,     0,  -565,    12,  -565,    13,    14,    15,    16,    17,
02296       18,    19,     0,     0,     0,     0,     0,    20,    21,    22,
02297       23,    24,    25,    26,     0,     0,    27,     0,     0,     0,
02298        0,     0,    28,    29,     0,    31,    32,    33,    34,    35,
02299       36,    37,    38,    39,    40,     0,    41,    42,     0,    43,
02300       44,    45,     0,    46,    47,     0,     0,     0,     0,     0,
02301        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02302        0,     0,     0,    48,     0,     0,    49,    50,     0,    51,
02303       52,     0,    53,     0,    54,    55,    56,    57,    58,    59,
02304       60,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02305        0,     0,     0,     0,     0,     0,     0,     0,     0,    61,
02306       62,    63,     0,     0,     0,     0,     0,     0,     4,     0,
02307        5,     6,     7,     8,     9,     0,     0,     0,    10,    11,
02308        0,     0,  -565,    12,  -565,    13,    14,    15,    16,    17,
02309       18,    19,     0,     0,     0,     0,     0,    20,    21,    22,
02310       23,    24,    25,    26,     0,     0,    27,     0,     0,     0,
02311        0,     0,    28,    29,    30,    31,    32,    33,    34,    35,
02312       36,    37,    38,    39,    40,     0,    41,    42,     0,    43,
02313       44,    45,     0,    46,    47,     0,     0,     0,     0,     0,
02314        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02315        0,     0,     0,    48,     0,     0,    49,    50,     0,    51,
02316       52,     0,    53,     0,    54,    55,    56,    57,    58,    59,
02317       60,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02318        0,     0,     0,     0,     0,     0,     0,     0,     0,    61,
02319       62,    63,     0,     0,     0,     0,     0,     0,     0,     0,
02320        0,     0,     0,     0,  -565,     0,     0,     0,     0,     0,
02321        0,     0,  -565,   238,  -565,     5,     6,     7,     8,     9,
02322        0,     0,  -565,    10,    11,     0,     0,  -565,    12,     0,
02323       13,    14,    15,    16,    17,    18,    19,     0,     0,     0,
02324        0,     0,    20,    21,    22,    23,    24,    25,    26,     0,
02325        0,    27,     0,     0,     0,     0,     0,    28,    29,     0,
02326       31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
02327        0,    41,    42,     0,    43,    44,    45,     0,    46,    47,
02328        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02329        0,     0,     0,     0,     0,     0,     0,     0,    48,     0,
02330        0,    49,    50,     0,    51,    52,     0,    53,     0,    54,
02331       55,    56,    57,    58,    59,    60,     0,     0,     0,     0,
02332        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02333        0,     0,     0,     0,    61,    62,    63,     0,     0,     0,
02334        0,     0,     0,   238,     0,     5,     6,     7,     8,     9,
02335        0,  -565,  -565,    10,    11,     0,     0,  -565,    12,  -565,
02336       13,    14,    15,    16,    17,    18,    19,     0,     0,     0,
02337        0,     0,    20,    21,    22,    23,    24,    25,    26,     0,
02338        0,    27,     0,     0,     0,     0,     0,    28,    29,     0,
02339       31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
02340        0,    41,    42,     0,    43,    44,    45,     0,    46,    47,
02341        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02342        0,     0,     0,     0,     0,     0,     0,     0,    48,     0,
02343        0,    49,    50,     0,    51,    52,     0,    53,     0,    54,
02344       55,    56,    57,    58,    59,    60,     0,     0,     0,     0,
02345        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02346        0,     0,     0,     0,    61,    62,    63,     0,     0,     0,
02347        0,     0,     0,   238,     0,     5,     6,     7,     8,     9,
02348        0,     0,     0,    10,    11,     0,     0,  -565,    12,  -565,
02349       13,    14,    15,    16,    17,    18,    19,     0,     0,     0,
02350        0,     0,    20,    21,    22,    23,    24,    25,    26,     0,
02351        0,    27,     0,     0,     0,     0,     0,    28,    29,     0,
02352       31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
02353        0,    41,    42,     0,    43,    44,    45,     0,    46,    47,
02354        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02355        0,     0,     0,     0,     0,     0,     0,     0,    48,     0,
02356        0,   239,    50,     0,    51,    52,     0,    53,     0,    54,
02357       55,    56,    57,    58,    59,    60,     0,     0,     0,     0,
02358        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02359        0,     0,     0,     0,    61,    62,    63,     0,     0,     0,
02360        0,     0,     0,   238,     0,     5,     6,     7,     8,     9,
02361        0,     0,     0,    10,    11,  -565,     0,  -565,    12,  -565,
02362       13,    14,    15,    16,    17,    18,    19,     0,     0,     0,
02363        0,     0,    20,    21,    22,    23,    24,    25,    26,     0,
02364        0,    27,     0,     0,     0,     0,     0,    28,    29,     0,
02365       31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
02366        0,    41,    42,     0,    43,    44,    45,     0,    46,    47,
02367        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02368        0,     0,     0,     0,     0,     0,     0,     0,    48,     0,
02369        0,    49,    50,     0,    51,    52,     0,    53,     0,    54,
02370       55,    56,    57,    58,    59,    60,     0,     0,     0,     0,
02371        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02372        0,     0,     0,     0,    61,    62,    63,     0,     0,     0,
02373        0,     0,     0,   238,     0,     5,     6,     7,     8,     9,
02374        0,     0,     0,    10,    11,  -565,     0,  -565,    12,  -565,
02375       13,    14,    15,    16,    17,    18,    19,     0,     0,     0,
02376        0,     0,    20,    21,    22,    23,    24,    25,    26,     0,
02377        0,    27,     0,     0,     0,     0,     0,    28,    29,     0,
02378       31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
02379        0,    41,    42,     0,    43,    44,    45,     0,    46,    47,
02380        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02381        0,     0,     0,     0,     0,     0,     0,     0,    48,     0,
02382        0,    49,    50,     0,    51,    52,     0,    53,     0,    54,
02383       55,    56,    57,    58,    59,    60,     0,     0,     0,     0,
02384        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02385        0,     0,     0,     0,    61,    62,    63,     0,     0,     0,
02386        0,     0,     0,     0,     0,     0,     0,     0,     0,  -565,
02387        0,     0,     0,     0,     0,     0,     0,  -565,   238,  -565,
02388        5,     6,     7,     8,     9,     0,     0,  -565,    10,    11,
02389        0,     0,     0,    12,     0,    13,    14,    15,    16,    17,
02390       18,    19,     0,     0,     0,     0,     0,    20,    21,    22,
02391       23,    24,    25,    26,     0,     0,    27,     0,     0,     0,
02392        0,     0,    28,    29,     0,    31,    32,    33,    34,    35,
02393       36,    37,    38,    39,    40,     0,    41,    42,     0,    43,
02394       44,    45,     0,    46,    47,     0,     0,     0,     0,     0,
02395        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02396        0,     0,     0,    48,     0,     0,    49,    50,     0,    51,
02397       52,     0,    53,     0,    54,    55,    56,    57,    58,    59,
02398       60,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02399        0,     0,     0,     0,     0,     0,     0,     0,     0,    61,
02400       62,    63,     0,     0,     0,     0,     0,     0,     0,     0,
02401        5,     6,     7,     0,     9,     0,     0,     0,    10,    11,
02402        0,     0,  -565,    12,  -565,    13,    14,    15,    16,    17,
02403       18,    19,     0,     0,     0,     0,     0,    20,    21,    22,
02404       23,    24,    25,    26,     0,     0,   192,     0,     0,     0,
02405        0,     0,     0,    29,     0,     0,    32,    33,    34,    35,
02406       36,    37,    38,    39,    40,   193,    41,    42,     0,    43,
02407       44,    45,     0,    46,    47,     0,     0,     0,     0,     0,
02408        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02409        0,     0,     0,   194,     0,     0,   195,    50,     0,    51,
02410       52,     0,   196,   197,    54,    55,    56,    57,    58,    59,
02411       60,     0,     0,     0,     0,     0,     0,     0,     0,     5,
02412        6,     7,     0,     9,     0,     0,     0,    10,    11,    61,
02413      198,    63,    12,     0,    13,    14,    15,    16,    17,    18,
02414       19,     0,     0,     0,     0,     0,    20,    21,    22,    23,
02415       24,    25,    26,     0,   221,    27,     0,     0,     0,     0,
02416        0,     0,    29,     0,     0,    32,    33,    34,    35,    36,
02417       37,    38,    39,    40,     0,    41,    42,     0,    43,    44,
02418       45,     0,    46,    47,     0,     0,     0,     0,     0,     0,
02419        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02420        0,     0,   194,     0,     0,   195,    50,     0,    51,    52,
02421        0,     0,     0,    54,    55,    56,    57,    58,    59,    60,
02422        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02423        0,     0,     0,     0,     0,     0,     0,     0,    61,    62,
02424       63,     0,     0,     0,     0,     0,     0,     0,     0,     5,
02425        6,     7,     0,     9,     0,     0,     0,    10,    11,     0,
02426        0,   284,    12,   285,    13,    14,    15,    16,    17,    18,
02427       19,     0,     0,     0,     0,     0,    20,    21,    22,    23,
02428       24,    25,    26,     0,     0,    27,     0,     0,     0,     0,
02429        0,     0,    29,     0,     0,    32,    33,    34,    35,    36,
02430       37,    38,    39,    40,     0,    41,    42,     0,    43,    44,
02431       45,     0,    46,    47,     0,     0,     0,     0,     0,     0,
02432        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02433        0,     0,   194,     0,     0,   195,    50,     0,    51,    52,
02434        0,     0,     0,    54,    55,    56,    57,    58,    59,    60,
02435        0,     0,     0,     0,     0,     0,     0,     0,     5,     6,
02436        7,     8,     9,     0,     0,     0,    10,    11,    61,    62,
02437       63,    12,     0,    13,    14,    15,    16,    17,    18,    19,
02438        0,     0,     0,     0,     0,    20,    21,    22,    23,    24,
02439       25,    26,     0,   221,    27,     0,     0,     0,     0,     0,
02440       28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
02441       38,    39,    40,     0,    41,    42,     0,    43,    44,    45,
02442        0,    46,    47,     0,     0,     0,     0,     0,     0,     0,
02443        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02444        0,    48,     0,     0,    49,    50,     0,    51,    52,     0,
02445       53,     0,    54,    55,    56,    57,    58,    59,    60,     0,
02446        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02447        0,     0,     0,     0,     0,     0,     0,    61,    62,    63,
02448        0,     0,     0,     0,     0,     0,     5,     6,     7,     8,
02449        9,     0,     0,     0,    10,    11,     0,     0,     0,    12,
02450      466,    13,    14,    15,    16,    17,    18,    19,     0,     0,
02451        0,     0,     0,    20,    21,    22,    23,    24,    25,    26,
02452        0,     0,    27,     0,     0,     0,     0,     0,    28,    29,
02453        0,    31,    32,    33,    34,    35,    36,    37,    38,    39,
02454       40,     0,    41,    42,     0,    43,    44,    45,     0,    46,
02455       47,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02456        0,     0,     0,     0,     0,     0,     0,     0,     0,    48,
02457        0,     0,    49,    50,     0,    51,    52,     0,    53,     0,
02458       54,    55,    56,    57,    58,    59,    60,     0,     0,     0,
02459        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02460        0,     0,     0,     0,     0,    61,    62,    63,     0,     0,
02461        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02462        0,     0,     0,     0,     0,     0,     0,     0,   466,   111,
02463      112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
02464      122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
02465      132,   133,   134,     0,     0,     0,   135,   136,   137,   359,
02466      360,   361,   362,   142,   143,   144,     0,     0,     0,     0,
02467        0,   145,   146,   147,   148,   363,   364,   365,   366,   153,
02468       37,    38,   367,    40,     0,     0,     0,     0,     0,     0,
02469        0,     0,   155,   156,   157,   158,   159,   160,   161,   162,
02470      163,     0,     0,   164,   165,     0,     0,   166,   167,   168,
02471      169,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02472        0,   170,     0,     0,     0,     0,     0,     0,     0,     0,
02473        0,     0,     0,     0,     0,     0,     0,     0,   171,   172,
02474      173,   174,   175,   176,   177,   178,   179,   180,     0,   181,
02475      182,     0,     0,     0,     0,     0,  -540,  -540,  -540,     0,
02476     -540,     0,     0,     0,  -540,  -540,     0,   183,   368,  -540,
02477        0,  -540,  -540,  -540,  -540,  -540,  -540,  -540,     0,  -540,
02478        0,     0,     0,  -540,  -540,  -540,  -540,  -540,  -540,  -540,
02479        0,     0,  -540,     0,     0,     0,     0,     0,     0,  -540,
02480        0,     0,  -540,  -540,  -540,  -540,  -540,  -540,  -540,  -540,
02481     -540,  -540,  -540,  -540,     0,  -540,  -540,  -540,     0,  -540,
02482     -540,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02483        0,     0,     0,     0,     0,     0,     0,     0,     0,  -540,
02484        0,     0,  -540,  -540,     0,  -540,  -540,     0,  -540,  -540,
02485     -540,  -540,  -540,  -540,  -540,  -540,  -540,     0,     0,     0,
02486        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02487        0,     0,     0,     0,     0,  -540,  -540,  -540,     0,     0,
02488        0,     0,     0,  -541,  -541,  -541,     0,  -541,     0,  -540,
02489        0,  -541,  -541,     0,     0,  -540,  -541,     0,  -541,  -541,
02490     -541,  -541,  -541,  -541,  -541,     0,  -541,     0,     0,     0,
02491     -541,  -541,  -541,  -541,  -541,  -541,  -541,     0,     0,  -541,
02492        0,     0,     0,     0,     0,     0,  -541,     0,     0,  -541,
02493     -541,  -541,  -541,  -541,  -541,  -541,  -541,  -541,  -541,  -541,
02494     -541,     0,  -541,  -541,  -541,     0,  -541,  -541,     0,     0,
02495        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02496        0,     0,     0,     0,     0,     0,  -541,     0,     0,  -541,
02497     -541,     0,  -541,  -541,     0,  -541,  -541,  -541,  -541,  -541,
02498     -541,  -541,  -541,  -541,     0,     0,     0,     0,     0,     0,
02499        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02500        0,     0,  -541,  -541,  -541,     0,     0,     0,     0,     0,
02501     -543,  -543,  -543,     0,  -543,     0,  -541,     0,  -543,  -543,
02502        0,     0,  -541,  -543,     0,  -543,  -543,  -543,  -543,  -543,
02503     -543,  -543,     0,     0,     0,     0,     0,  -543,  -543,  -543,
02504     -543,  -543,  -543,  -543,     0,     0,  -543,     0,     0,     0,
02505        0,     0,     0,  -543,     0,     0,  -543,  -543,  -543,  -543,
02506     -543,  -543,  -543,  -543,  -543,  -543,  -543,  -543,     0,  -543,
02507     -543,  -543,     0,  -543,  -543,     0,     0,     0,     0,     0,
02508        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02509        0,     0,     0,  -543,   710,     0,  -543,  -543,     0,  -543,
02510     -543,     0,  -543,  -543,  -543,  -543,  -543,  -543,  -543,  -543,
02511     -543,     0,     0,     0,     0,     0,   -99,     0,     0,     0,
02512        0,     0,     0,     0,  -545,  -545,  -545,     0,  -545,  -543,
02513     -543,  -543,  -545,  -545,     0,     0,     0,  -545,     0,  -545,
02514     -545,  -545,  -545,  -545,  -545,  -545,     0,     0,     0,  -543,
02515        0,  -545,  -545,  -545,  -545,  -545,  -545,  -545,     0,     0,
02516     -545,     0,     0,     0,     0,     0,     0,  -545,     0,     0,
02517     -545,  -545,  -545,  -545,  -545,  -545,  -545,  -545,  -545,  -545,
02518     -545,  -545,     0,  -545,  -545,  -545,     0,  -545,  -545,     0,
02519        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02520        0,     0,     0,     0,     0,     0,     0,  -545,     0,     0,
02521     -545,  -545,     0,  -545,  -545,     0,  -545,  -545,  -545,  -545,
02522     -545,  -545,  -545,  -545,  -545,     0,     0,     0,     0,     0,
02523        0,     0,     0,     0,     0,     0,     0,     0,  -546,  -546,
02524     -546,     0,  -546,  -545,  -545,  -545,  -546,  -546,     0,     0,
02525        0,  -546,     0,  -546,  -546,  -546,  -546,  -546,  -546,  -546,
02526        0,     0,     0,  -545,     0,  -546,  -546,  -546,  -546,  -546,
02527     -546,  -546,     0,     0,  -546,     0,     0,     0,     0,     0,
02528        0,  -546,     0,     0,  -546,  -546,  -546,  -546,  -546,  -546,
02529     -546,  -546,  -546,  -546,  -546,  -546,     0,  -546,  -546,  -546,
02530        0,  -546,  -546,     0,     0,     0,     0,     0,     0,     0,
02531        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02532        0,  -546,     0,     0,  -546,  -546,     0,  -546,  -546,     0,
02533     -546,  -546,  -546,  -546,  -546,  -546,  -546,  -546,  -546,     0,
02534        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02535        0,     0,     0,     0,     0,     0,     0,  -546,  -546,  -546,
02536        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02537        0,     0,     0,     0,     0,     0,     0,  -546,   111,   112,
02538      113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
02539      123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
02540      133,   134,     0,     0,     0,   135,   136,   137,   138,   139,
02541      140,   141,   142,   143,   144,     0,     0,     0,     0,     0,
02542      145,   146,   147,   148,   149,   150,   151,   152,   153,   266,
02543      267,   154,   268,     0,     0,     0,     0,     0,     0,     0,
02544        0,   155,   156,   157,   158,   159,   160,   161,   162,   163,
02545        0,     0,   164,   165,     0,     0,   166,   167,   168,   169,
02546        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02547      170,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02548        0,     0,     0,     0,     0,     0,     0,   171,   172,   173,
02549      174,   175,   176,   177,   178,   179,   180,     0,   181,   182,
02550        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02551        0,     0,     0,     0,     0,     0,   183,   111,   112,   113,
02552      114,   115,   116,   117,   118,   119,   120,   121,   122,   123,
02553      124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
02554      134,     0,     0,     0,   135,   136,   137,   138,   139,   140,
02555      141,   142,   143,   144,     0,     0,     0,     0,     0,   145,
02556      146,   147,   148,   149,   150,   151,   152,   153,   223,     0,
02557      154,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02558      155,   156,   157,   158,   159,   160,   161,   162,   163,     0,
02559        0,   164,   165,     0,     0,   166,   167,   168,   169,     0,
02560        0,     0,     0,     0,     0,     0,     0,     0,     0,   170,
02561        0,     0,    55,     0,     0,     0,     0,     0,     0,     0,
02562        0,     0,     0,     0,     0,     0,   171,   172,   173,   174,
02563      175,   176,   177,   178,   179,   180,     0,   181,   182,     0,
02564        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02565        0,     0,     0,     0,     0,   183,   111,   112,   113,   114,
02566      115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
02567      125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
02568        0,     0,     0,   135,   136,   137,   138,   139,   140,   141,
02569      142,   143,   144,     0,     0,     0,     0,     0,   145,   146,
02570      147,   148,   149,   150,   151,   152,   153,     0,     0,   154,
02571        0,     0,     0,     0,     0,     0,     0,     0,     0,   155,
02572      156,   157,   158,   159,   160,   161,   162,   163,     0,     0,
02573      164,   165,     0,     0,   166,   167,   168,   169,     0,     0,
02574        0,     0,     0,     0,     0,     0,     0,     0,   170,     0,
02575        0,    55,     0,     0,     0,     0,     0,     0,     0,     0,
02576        0,     0,     0,     0,     0,   171,   172,   173,   174,   175,
02577      176,   177,   178,   179,   180,     0,   181,   182,     0,     0,
02578        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02579        0,     0,     0,     0,   183,   111,   112,   113,   114,   115,
02580      116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
02581      126,   127,   128,   129,   130,   131,   132,   133,   134,     0,
02582        0,     0,   135,   136,   137,   138,   139,   140,   141,   142,
02583      143,   144,     0,     0,     0,     0,     0,   145,   146,   147,
02584      148,   149,   150,   151,   152,   153,     0,     0,   154,     0,
02585        0,     0,     0,     0,     0,     0,     0,     0,   155,   156,
02586      157,   158,   159,   160,   161,   162,   163,     0,     0,   164,
02587      165,     0,     0,   166,   167,   168,   169,     0,     0,     0,
02588        0,     0,     0,     0,     0,     0,     0,   170,     0,     0,
02589        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02590        0,     0,     0,     0,   171,   172,   173,   174,   175,   176,
02591      177,   178,   179,   180,     0,   181,   182,     0,     0,     5,
02592        6,     7,     0,     9,     0,     0,     0,    10,    11,     0,
02593        0,     0,    12,   183,    13,    14,    15,   228,   229,    18,
02594       19,     0,     0,     0,     0,     0,   230,   231,   232,    23,
02595       24,    25,    26,     0,     0,   192,     0,     0,     0,     0,
02596        0,     0,   255,     0,     0,    32,    33,    34,    35,    36,
02597       37,    38,    39,    40,     0,    41,    42,     0,    43,    44,
02598       45,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02599        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02600        0,     0,   256,     0,     0,   195,    50,     0,    51,    52,
02601        0,     0,     0,    54,    55,    56,    57,    58,    59,    60,
02602        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02603        0,     5,     6,     7,     0,     9,     0,     0,   257,    10,
02604       11,     0,     0,     0,    12,     0,    13,    14,    15,   228,
02605      229,    18,    19,     0,     0,     0,   258,     0,   230,   231,
02606      232,    23,    24,    25,    26,     0,     0,   192,     0,     0,
02607        0,     0,     0,     0,   255,     0,     0,    32,    33,    34,
02608       35,    36,    37,    38,    39,    40,     0,    41,    42,     0,
02609       43,    44,    45,     0,     0,     0,     0,     0,     0,     0,
02610        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02611        0,     0,     0,     0,   256,     0,     0,   195,    50,     0,
02612       51,    52,     0,     0,     0,    54,    55,    56,    57,    58,
02613       59,    60,     0,     0,     0,     0,     0,     0,     0,     0,
02614        0,     0,     0,     5,     6,     7,     8,     9,     0,     0,
02615      257,    10,    11,     0,     0,     0,    12,     0,    13,    14,
02616       15,    16,    17,    18,    19,     0,     0,     0,   482,     0,
02617       20,    21,    22,    23,    24,    25,    26,     0,     0,    27,
02618        0,     0,     0,     0,     0,    28,    29,    30,    31,    32,
02619       33,    34,    35,    36,    37,    38,    39,    40,     0,    41,
02620       42,     0,    43,    44,    45,     0,    46,    47,     0,     0,
02621        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02622        0,     0,     0,     0,     0,     0,    48,     0,     0,    49,
02623       50,     0,    51,    52,     0,    53,     0,    54,    55,    56,
02624       57,    58,    59,    60,     0,     0,     0,     0,     0,     0,
02625        0,     0,     5,     6,     7,     8,     9,     0,     0,     0,
02626       10,    11,    61,    62,    63,    12,     0,    13,    14,    15,
02627       16,    17,    18,    19,     0,     0,     0,     0,     0,    20,
02628       21,    22,    23,    24,    25,    26,     0,     0,    27,     0,
02629        0,     0,     0,     0,    28,    29,     0,    31,    32,    33,
02630       34,    35,    36,    37,    38,    39,    40,     0,    41,    42,
02631        0,    43,    44,    45,     0,    46,    47,     0,     0,     0,
02632        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02633        0,     0,     0,     0,     0,    48,     0,     0,    49,    50,
02634        0,    51,    52,     0,    53,     0,    54,    55,    56,    57,
02635       58,    59,    60,     0,     0,     0,     0,     0,     0,     0,
02636        0,     5,     6,     7,     0,     9,     0,     0,     0,    10,
02637       11,    61,    62,    63,    12,     0,    13,    14,    15,    16,
02638       17,    18,    19,     0,     0,     0,     0,     0,    20,    21,
02639       22,    23,    24,    25,    26,     0,     0,   192,     0,     0,
02640        0,     0,     0,     0,    29,     0,     0,    32,    33,    34,
02641       35,    36,    37,    38,    39,    40,   193,    41,    42,     0,
02642       43,    44,    45,     0,    46,    47,     0,     0,     0,     0,
02643        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02644        0,     0,     0,     0,   194,     0,     0,   195,    50,     0,
02645       51,    52,     0,   196,   197,    54,    55,    56,    57,    58,
02646       59,    60,     0,     0,     0,     0,     0,     0,     0,     0,
02647        5,     6,     7,     0,     9,     0,     0,     0,    10,    11,
02648       61,   198,    63,    12,     0,    13,    14,    15,   228,   229,
02649       18,    19,     0,     0,     0,     0,     0,   230,   231,   232,
02650       23,    24,    25,    26,     0,     0,   192,     0,     0,     0,
02651        0,     0,     0,    29,     0,     0,    32,    33,    34,    35,
02652       36,    37,    38,    39,    40,   193,    41,    42,     0,    43,
02653       44,    45,     0,    46,    47,     0,     0,     0,     0,     0,
02654        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02655        0,     0,     0,   194,     0,     0,   195,    50,     0,    51,
02656       52,     0,   577,   197,    54,    55,    56,    57,    58,    59,
02657       60,     0,     0,     0,     0,     0,     0,     0,     0,     5,
02658        6,     7,     0,     9,     0,     0,     0,    10,    11,    61,
02659      198,    63,    12,     0,    13,    14,    15,   228,   229,    18,
02660       19,     0,     0,     0,     0,     0,   230,   231,   232,    23,
02661       24,    25,    26,     0,     0,   192,     0,     0,     0,     0,
02662        0,     0,    29,     0,     0,    32,    33,    34,    35,    36,
02663       37,    38,    39,    40,   193,    41,    42,     0,    43,    44,
02664       45,     0,    46,    47,     0,     0,     0,     0,     0,     0,
02665        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02666        0,     0,   194,     0,     0,   195,    50,     0,    51,    52,
02667        0,   196,     0,    54,    55,    56,    57,    58,    59,    60,
02668        0,     0,     0,     0,     0,     0,     0,     0,     5,     6,
02669        7,     0,     9,     0,     0,     0,    10,    11,    61,   198,
02670       63,    12,     0,    13,    14,    15,   228,   229,    18,    19,
02671        0,     0,     0,     0,     0,   230,   231,   232,    23,    24,
02672       25,    26,     0,     0,   192,     0,     0,     0,     0,     0,
02673        0,    29,     0,     0,    32,    33,    34,    35,    36,    37,
02674       38,    39,    40,   193,    41,    42,     0,    43,    44,    45,
02675        0,    46,    47,     0,     0,     0,     0,     0,     0,     0,
02676        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02677        0,   194,     0,     0,   195,    50,     0,    51,    52,     0,
02678        0,   197,    54,    55,    56,    57,    58,    59,    60,     0,
02679        0,     0,     0,     0,     0,     0,     0,     5,     6,     7,
02680        0,     9,     0,     0,     0,    10,    11,    61,   198,    63,
02681       12,     0,    13,    14,    15,   228,   229,    18,    19,     0,
02682        0,     0,     0,     0,   230,   231,   232,    23,    24,    25,
02683       26,     0,     0,   192,     0,     0,     0,     0,     0,     0,
02684       29,     0,     0,    32,    33,    34,    35,    36,    37,    38,
02685       39,    40,   193,    41,    42,     0,    43,    44,    45,     0,
02686       46,    47,     0,     0,     0,     0,     0,     0,     0,     0,
02687        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02688      194,     0,     0,   195,    50,     0,    51,    52,     0,   577,
02689        0,    54,    55,    56,    57,    58,    59,    60,     0,     0,
02690        0,     0,     0,     0,     0,     0,     5,     6,     7,     0,
02691        9,     0,     0,     0,    10,    11,    61,   198,    63,    12,
02692        0,    13,    14,    15,   228,   229,    18,    19,     0,     0,
02693        0,     0,     0,   230,   231,   232,    23,    24,    25,    26,
02694        0,     0,   192,     0,     0,     0,     0,     0,     0,    29,
02695        0,     0,    32,    33,    34,    35,    36,    37,    38,    39,
02696       40,   193,    41,    42,     0,    43,    44,    45,     0,    46,
02697       47,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02698        0,     0,     0,     0,     0,     0,     0,     0,     0,   194,
02699        0,     0,   195,    50,     0,    51,    52,     0,     0,     0,
02700       54,    55,    56,    57,    58,    59,    60,     0,     0,     0,
02701        0,     0,     0,     0,     0,     5,     6,     7,     0,     9,
02702        0,     0,     0,    10,    11,    61,   198,    63,    12,     0,
02703       13,    14,    15,    16,    17,    18,    19,     0,     0,     0,
02704        0,     0,    20,    21,    22,    23,    24,    25,    26,     0,
02705        0,   192,     0,     0,     0,     0,     0,     0,    29,     0,
02706        0,    32,    33,    34,    35,    36,    37,    38,    39,    40,
02707        0,    41,    42,     0,    43,    44,    45,     0,    46,    47,
02708        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02709        0,     0,     0,     0,     0,     0,     0,     0,   194,     0,
02710        0,   195,    50,     0,    51,    52,     0,   476,     0,    54,
02711       55,    56,    57,    58,    59,    60,     0,     0,     0,     0,
02712        0,     0,     0,     0,     5,     6,     7,     0,     9,     0,
02713        0,     0,    10,    11,    61,   198,    63,    12,     0,    13,
02714       14,    15,   228,   229,    18,    19,     0,     0,     0,     0,
02715        0,   230,   231,   232,    23,    24,    25,    26,     0,     0,
02716      192,     0,     0,     0,     0,     0,     0,    29,     0,     0,
02717       32,    33,    34,    35,    36,    37,    38,    39,    40,     0,
02718       41,    42,     0,    43,    44,    45,     0,    46,    47,     0,
02719        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02720        0,     0,     0,     0,     0,     0,     0,   194,     0,     0,
02721      195,    50,     0,    51,    52,     0,   196,     0,    54,    55,
02722       56,    57,    58,    59,    60,     0,     0,     0,     0,     0,
02723        0,     0,     0,     5,     6,     7,     0,     9,     0,     0,
02724        0,    10,    11,    61,   198,    63,    12,     0,    13,    14,
02725       15,   228,   229,    18,    19,     0,     0,     0,     0,     0,
02726      230,   231,   232,    23,    24,    25,    26,     0,     0,   192,
02727        0,     0,     0,     0,     0,     0,    29,     0,     0,    32,
02728       33,    34,    35,    36,    37,    38,    39,    40,     0,    41,
02729       42,     0,    43,    44,    45,     0,    46,    47,     0,     0,
02730        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02731        0,     0,     0,     0,     0,     0,   194,     0,     0,   195,
02732       50,     0,    51,    52,     0,   758,     0,    54,    55,    56,
02733       57,    58,    59,    60,     0,     0,     0,     0,     0,     0,
02734        0,     0,     5,     6,     7,     0,     9,     0,     0,     0,
02735       10,    11,    61,   198,    63,    12,     0,    13,    14,    15,
02736      228,   229,    18,    19,     0,     0,     0,     0,     0,   230,
02737      231,   232,    23,    24,    25,    26,     0,     0,   192,     0,
02738        0,     0,     0,     0,     0,    29,     0,     0,    32,    33,
02739       34,    35,    36,    37,    38,    39,    40,     0,    41,    42,
02740        0,    43,    44,    45,     0,    46,    47,     0,     0,     0,
02741        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02742        0,     0,     0,     0,     0,   194,     0,     0,   195,    50,
02743        0,    51,    52,     0,   476,     0,    54,    55,    56,    57,
02744       58,    59,    60,     0,     0,     0,     0,     0,     0,     0,
02745        0,     5,     6,     7,     0,     9,     0,     0,     0,    10,
02746       11,    61,   198,    63,    12,     0,    13,    14,    15,   228,
02747      229,    18,    19,     0,     0,     0,     0,     0,   230,   231,
02748      232,    23,    24,    25,    26,     0,     0,   192,     0,     0,
02749        0,     0,     0,     0,    29,     0,     0,    32,    33,    34,
02750       35,    36,    37,    38,    39,    40,     0,    41,    42,     0,
02751       43,    44,    45,     0,    46,    47,     0,     0,     0,     0,
02752        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02753        0,     0,     0,     0,   194,     0,     0,   195,    50,     0,
02754       51,    52,     0,   577,     0,    54,    55,    56,    57,    58,
02755       59,    60,     0,     0,     0,     0,     0,     0,     0,     0,
02756        5,     6,     7,     0,     9,     0,     0,     0,    10,    11,
02757       61,   198,    63,    12,     0,    13,    14,    15,   228,   229,
02758       18,    19,     0,     0,     0,     0,     0,   230,   231,   232,
02759       23,    24,    25,    26,     0,     0,   192,     0,     0,     0,
02760        0,     0,     0,    29,     0,     0,    32,    33,    34,    35,
02761       36,    37,    38,    39,    40,     0,    41,    42,     0,    43,
02762       44,    45,     0,    46,    47,     0,     0,     0,     0,     0,
02763        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02764        0,     0,     0,   194,     0,     0,   195,    50,     0,    51,
02765       52,     0,     0,     0,    54,    55,    56,    57,    58,    59,
02766       60,     0,     0,     0,     0,     0,     0,     0,     0,     5,
02767        6,     7,     0,     9,     0,     0,     0,    10,    11,    61,
02768      198,    63,    12,     0,    13,    14,    15,    16,    17,    18,
02769       19,     0,     0,     0,     0,     0,    20,    21,    22,    23,
02770       24,    25,    26,     0,     0,    27,     0,     0,     0,     0,
02771        0,     0,    29,     0,     0,    32,    33,    34,    35,    36,
02772       37,    38,    39,    40,     0,    41,    42,     0,    43,    44,
02773       45,     0,    46,    47,     0,     0,     0,     0,     0,     0,
02774        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02775        0,     0,   194,     0,     0,   195,    50,     0,    51,    52,
02776        0,     0,     0,    54,    55,    56,    57,    58,    59,    60,
02777        0,     0,     0,     0,     0,     0,     0,     0,     5,     6,
02778        7,     0,     9,     0,     0,     0,    10,    11,    61,    62,
02779       63,    12,     0,    13,    14,    15,    16,    17,    18,    19,
02780        0,     0,     0,     0,     0,    20,    21,    22,    23,    24,
02781       25,    26,     0,     0,   192,     0,     0,     0,     0,     0,
02782        0,    29,     0,     0,    32,    33,    34,    35,    36,    37,
02783       38,    39,    40,     0,    41,    42,     0,    43,    44,    45,
02784        0,    46,    47,     0,     0,     0,     0,     0,     0,     0,
02785        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02786        0,   194,     0,     0,   195,    50,     0,    51,    52,     0,
02787        0,     0,    54,    55,    56,    57,    58,    59,    60,     0,
02788        0,     0,     0,     0,     0,     0,     0,     5,     6,     7,
02789        0,     9,     0,     0,     0,    10,    11,    61,   198,    63,
02790       12,     0,    13,    14,    15,   228,   229,    18,    19,     0,
02791        0,     0,     0,     0,   230,   231,   232,    23,    24,    25,
02792       26,     0,     0,   192,     0,     0,     0,     0,     0,     0,
02793      255,     0,     0,    32,    33,    34,    35,    36,    37,    38,
02794       39,    40,     0,    41,    42,     0,    43,    44,    45,     0,
02795        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02796        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02797      256,     0,     0,   300,    50,     0,    51,    52,     0,   301,
02798        0,    54,    55,    56,    57,    58,    59,    60,     0,     0,
02799        0,     0,     5,     6,     7,     0,     9,     0,     0,     0,
02800       10,    11,     0,     0,     0,    12,   257,    13,    14,    15,
02801      228,   229,    18,    19,     0,     0,     0,     0,     0,   230,
02802      231,   232,    23,    24,    25,    26,     0,     0,   192,     0,
02803        0,     0,     0,     0,     0,   255,     0,     0,    32,    33,
02804       34,    35,    36,    37,    38,    39,    40,     0,    41,    42,
02805        0,    43,    44,    45,     0,     0,     0,     0,     0,     0,
02806        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02807        0,     0,     0,     0,     0,   342,     0,     0,    49,    50,
02808        0,    51,    52,     0,    53,     0,    54,    55,    56,    57,
02809       58,    59,    60,     0,     0,     0,     0,     5,     6,     7,
02810        0,     9,     0,     0,     0,    10,    11,     0,     0,     0,
02811       12,   257,    13,    14,    15,   228,   229,    18,    19,     0,
02812        0,     0,     0,     0,   230,   231,   232,    23,    24,    25,
02813       26,     0,     0,   192,     0,     0,     0,     0,     0,     0,
02814      255,     0,     0,    32,    33,    34,   349,    36,    37,    38,
02815      350,    40,     0,    41,    42,     0,    43,    44,    45,     0,
02816        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02817        0,     0,     0,     0,     0,     0,     0,   351,     0,     0,
02818      352,     0,     0,   195,    50,     0,    51,    52,     0,     0,
02819        0,    54,    55,    56,    57,    58,    59,    60,     0,     0,
02820        0,     0,     5,     6,     7,     0,     9,     0,     0,     0,
02821       10,    11,     0,     0,     0,    12,   257,    13,    14,    15,
02822      228,   229,    18,    19,     0,     0,     0,     0,     0,   230,
02823      231,   232,    23,    24,    25,    26,     0,     0,   192,     0,
02824        0,     0,     0,     0,     0,   255,     0,     0,    32,    33,
02825       34,   349,    36,    37,    38,   350,    40,     0,    41,    42,
02826        0,    43,    44,    45,     0,     0,     0,     0,     0,     0,
02827        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02828        0,     0,     0,     0,     0,   352,     0,     0,   195,    50,
02829        0,    51,    52,     0,     0,     0,    54,    55,    56,    57,
02830       58,    59,    60,     0,     0,     0,     0,     5,     6,     7,
02831        0,     9,     0,     0,     0,    10,    11,     0,     0,     0,
02832       12,   257,    13,    14,    15,   228,   229,    18,    19,     0,
02833        0,     0,     0,     0,   230,   231,   232,    23,    24,    25,
02834       26,     0,     0,   192,     0,     0,     0,     0,     0,     0,
02835      255,     0,     0,    32,    33,    34,    35,    36,    37,    38,
02836       39,    40,     0,    41,    42,     0,    43,    44,    45,     0,
02837        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02838        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02839      256,     0,     0,   300,    50,     0,    51,    52,     0,     0,
02840        0,    54,    55,    56,    57,    58,    59,    60,     0,     0,
02841        0,     0,     5,     6,     7,     0,     9,     0,     0,     0,
02842       10,    11,     0,     0,     0,    12,   257,    13,    14,    15,
02843      228,   229,    18,    19,     0,     0,     0,     0,     0,   230,
02844      231,   232,    23,    24,    25,    26,     0,     0,   192,     0,
02845        0,     0,     0,     0,     0,   255,     0,     0,    32,    33,
02846       34,    35,    36,    37,    38,    39,    40,     0,    41,    42,
02847        0,    43,    44,    45,     0,     0,     0,     0,     0,     0,
02848        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02849        0,     0,     0,     0,     0,   887,     0,     0,   195,    50,
02850        0,    51,    52,     0,     0,     0,    54,    55,    56,    57,
02851       58,    59,    60,     0,     0,     0,     0,     5,     6,     7,
02852        0,     9,     0,     0,     0,    10,    11,     0,     0,     0,
02853       12,   257,    13,    14,    15,   228,   229,    18,    19,     0,
02854        0,     0,     0,     0,   230,   231,   232,    23,    24,    25,
02855       26,     0,     0,   192,     0,     0,     0,     0,     0,     0,
02856      255,     0,     0,    32,    33,    34,    35,    36,    37,    38,
02857       39,    40,     0,    41,    42,     0,    43,    44,    45,     0,
02858        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02859        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02860      897,     0,     0,   195,    50,     0,    51,    52,     0,     0,
02861        0,    54,    55,    56,    57,    58,    59,    60,     0,     0,
02862        0,     0,     0,   584,   524,     0,     0,   585,     0,     0,
02863        0,     0,     0,     0,     0,     0,   257,   155,   156,   157,
02864      158,   159,   160,   161,   162,   163,     0,     0,   164,   165,
02865        0,     0,   166,   167,   168,   169,     0,     0,     0,     0,
02866        0,     0,     0,     0,     0,     0,   170,     0,     0,     0,
02867        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02868        0,     0,     0,   171,   172,   173,   174,   175,   176,   177,
02869      178,   179,   180,     0,   181,   182,     0,     0,     0,     0,
02870      605,   516,     0,     0,   606,     0,     0,     0,     0,     0,
02871        0,     0,   183,   217,   155,   156,   157,   158,   159,   160,
02872      161,   162,   163,     0,     0,   164,   165,     0,     0,   166,
02873      167,   168,   169,     0,     0,     0,     0,     0,     0,     0,
02874        0,     0,     0,   170,     0,     0,     0,     0,     0,     0,
02875        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02876      171,   172,   173,   174,   175,   176,   177,   178,   179,   180,
02877        0,   181,   182,     0,     0,     0,     0,   608,   524,     0,
02878        0,   609,     0,     0,     0,     0,     0,     0,     0,   183,
02879      217,   155,   156,   157,   158,   159,   160,   161,   162,   163,
02880        0,     0,   164,   165,     0,     0,   166,   167,   168,   169,
02881        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02882      170,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02883        0,     0,     0,     0,     0,     0,     0,   171,   172,   173,
02884      174,   175,   176,   177,   178,   179,   180,     0,   181,   182,
02885        0,     0,     0,     0,   679,   516,     0,     0,   680,     0,
02886        0,     0,     0,     0,     0,     0,   183,   217,   155,   156,
02887      157,   158,   159,   160,   161,   162,   163,     0,     0,   164,
02888      165,     0,     0,   166,   167,   168,   169,     0,     0,     0,
02889        0,     0,     0,     0,     0,     0,     0,   170,     0,     0,
02890        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02891        0,     0,     0,     0,   171,   172,   173,   174,   175,   176,
02892      177,   178,   179,   180,     0,   181,   182,     0,     0,     0,
02893        0,   682,   524,     0,     0,   683,     0,     0,     0,     0,
02894        0,     0,     0,   183,   217,   155,   156,   157,   158,   159,
02895      160,   161,   162,   163,     0,     0,   164,   165,     0,     0,
02896      166,   167,   168,   169,     0,     0,     0,     0,     0,     0,
02897        0,     0,     0,     0,   170,     0,     0,     0,     0,     0,
02898        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02899        0,   171,   172,   173,   174,   175,   176,   177,   178,   179,
02900      180,     0,   181,   182,     0,     0,     0,     0,   689,   516,
02901        0,     0,   690,     0,     0,     0,     0,     0,     0,     0,
02902      183,   217,   155,   156,   157,   158,   159,   160,   161,   162,
02903      163,     0,     0,   164,   165,     0,     0,   166,   167,   168,
02904      169,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02905        0,   170,     0,     0,     0,     0,     0,     0,     0,     0,
02906        0,     0,     0,     0,     0,     0,     0,     0,   171,   172,
02907      173,   174,   175,   176,   177,   178,   179,   180,     0,   181,
02908      182,     0,     0,     0,     0,   562,   524,     0,     0,   563,
02909        0,     0,     0,     0,     0,     0,     0,   183,   217,   155,
02910      156,   157,   158,   159,   160,   161,   162,   163,     0,     0,
02911      164,   165,     0,     0,   166,   167,   168,   169,     0,     0,
02912        0,     0,     0,     0,     0,     0,     0,     0,   170,     0,
02913        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02914        0,     0,     0,     0,     0,   171,   172,   173,   174,   175,
02915      176,   177,   178,   179,   180,     0,   181,   182,     0,     0,
02916        0,     0,   949,   516,     0,     0,   950,     0,     0,     0,
02917        0,     0,     0,     0,   183,   217,   155,   156,   157,   158,
02918      159,   160,   161,   162,   163,     0,     0,   164,   165,     0,
02919        0,   166,   167,   168,   169,     0,     0,     0,     0,     0,
02920        0,     0,     0,     0,     0,   170,     0,     0,     0,     0,
02921        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02922        0,     0,   171,   172,   173,   174,   175,   176,   177,   178,
02923      179,   180,     0,   181,   182,     0,     0,     0,     0,   955,
02924      516,     0,     0,   956,     0,     0,     0,     0,     0,     0,
02925        0,   183,   217,   155,   156,   157,   158,   159,   160,   161,
02926      162,   163,     0,     0,   164,   165,     0,     0,   166,   167,
02927      168,   169,     0,     0,     0,     0,     0,     0,     0,     0,
02928        0,     0,   170,     0,     0,     0,     0,     0,     0,     0,
02929        0,     0,     0,     0,     0,     0,     0,     0,     0,   171,
02930      172,   173,   174,   175,   176,   177,   178,   179,   180,     0,
02931      181,   182,     0,     0,     0,     0,   958,   524,     0,     0,
02932      959,     0,     0,     0,     0,     0,     0,     0,   183,   217,
02933      155,   156,   157,   158,   159,   160,   161,   162,   163,     0,
02934        0,   164,   165,     0,     0,   166,   167,   168,   169,     0,
02935        0,     0,     0,     0,     0,     0,     0,     0,     0,   170,
02936        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02937        0,     0,     0,     0,     0,     0,   171,   172,   173,   174,
02938      175,   176,   177,   178,   179,   180,     0,   181,   182,     0,
02939        0,     0,     0,   562,   524,     0,     0,   563,     0,     0,
02940        0,     0,     0,     0,     0,   183,   217,   155,   156,   157,
02941      158,   159,   160,   161,   162,   163,     0,     0,   164,   165,
02942        0,     0,   166,   167,   168,   169,     0,     0,     0,     0,
02943        0,     0,     0,     0,     0,     0,   170,     0,     0,     0,
02944        0,     0,     0,     0,   705,     0,     0,     0,     0,     0,
02945        0,     0,     0,   171,   172,   173,   174,   175,   176,   177,
02946      178,   179,   180,   650,   181,   182,     0,     0,   304,   305,
02947      306,   307,   308,   309,   310,   311,   312,   313,   314,   315,
02948      316,     0,   183,   317,   318,     0,     0,   304,   305,   306,
02949      307,   308,   309,   310,   311,   312,   313,   314,   315,   316,
02950        0,     0,   317,   318,     0,     0,     0,     0,     0,     0,
02951      319,     0,   320,   321,   322,   323,   324,   325,   326,   327,
02952      328,   329,     0,     0,     0,     0,     0,     0,     0,   319,
02953        0,   320,   321,   322,   323,   324,   325,   326,   327,   328,
02954      329
02955 };
02956 
02957 static const yytype_int16 yycheck[] =
02958 {
02959        2,    16,    17,    55,     2,    20,     4,    51,    28,    75,
02960       51,    52,   446,   336,   210,     8,    49,   537,    16,    17,
02961      303,     8,    20,    27,   536,    29,   556,    53,    83,   583,
02962      446,    86,   249,   331,    65,    28,   253,     4,    90,   442,
02963        8,    28,   748,   272,    13,   274,   352,   276,    49,    51,
02964       52,    49,    50,   607,    86,    53,   735,   667,   813,   836,
02965       28,   671,   641,   811,    62,   732,   615,     1,    22,    27,
02966       16,    17,    29,    50,    20,    25,   330,    75,   332,   482,
02967       53,   566,   567,    62,    82,    83,    26,    55,    86,    87,
02968       88,    89,   728,    13,    13,    61,   394,    25,    22,    13,
02969       61,    85,    75,   239,    76,    82,    83,    37,    38,    86,
02970      140,   398,   390,   749,    87,    88,    89,   147,   372,   373,
02971      398,    85,    90,   871,   558,    87,    85,   681,    65,   109,
02972       15,    13,    17,     0,    25,    25,   147,    13,   692,   393,
02973      106,   395,   114,   104,   105,   432,   444,   109,   925,    86,
02974      107,    25,    56,   732,   108,   139,   735,    25,   688,   914,
02975      140,     2,   195,     4,   300,   419,   696,   834,   916,    25,
02976      140,   140,    25,   722,   723,   139,   145,   147,   147,   113,
02977      139,    59,    60,   889,   108,   146,   620,   145,    85,   147,
02978      140,   445,   258,   655,   227,   943,   136,   195,   877,   214,
02979      662,   216,   217,   205,   620,   136,   239,   641,   210,   241,
02980      241,   145,   140,   147,   881,   217,   214,   147,   216,   217,
02981      146,   706,   220,   142,   222,   145,   145,   147,   147,   227,
02982      459,   145,    26,   147,   289,   290,   291,   292,   239,   146,
02983      238,   239,   139,   220,   542,   222,   649,   553,   858,   140,
02984      140,   255,   142,    25,   298,   834,   554,   836,    28,   303,
02985      258,   695,   811,   145,   813,   147,   140,   300,   214,   145,
02986      216,   147,   140,    99,   142,   301,   109,    26,   232,   695,
02987      792,   235,   337,   338,   140,   258,    25,   140,    87,   543,
02988      288,   289,   290,   291,   292,   293,   294,   295,   877,   300,
02989      298,   555,   300,   301,   241,   303,   142,   339,   220,    85,
02990      109,   147,   289,   290,   291,   292,   331,   294,   295,   298,
02991      140,   288,   871,   872,   303,    37,    38,    26,   301,   331,
02992      860,   243,   145,   331,   147,   333,    85,   109,   858,   337,
02993      338,   140,   136,   109,    85,    87,   925,    26,   142,   390,
02994       87,    85,   140,   351,   677,    87,    85,   142,    85,    56,
02995      337,   338,   330,   139,    26,   914,   109,   916,   140,    87,
02996      109,   143,   109,    88,   351,   147,   442,   109,   332,   394,
02997      378,   379,   912,   666,   580,   602,    85,   136,   429,   138,
02998      139,   109,   394,   413,   943,    85,   394,   238,   139,   378,
02999      379,   140,   339,   957,   143,   139,    85,    85,   147,   138,
03000      139,   138,   139,   142,   416,    52,   482,   354,   416,    56,
03001      413,   140,   140,    85,    87,   393,   413,   425,    85,   444,
03002      140,   865,    85,    85,    59,    60,    85,   136,   142,   138,
03003      139,   395,   444,   142,   442,   413,   444,   288,   138,   139,
03004      418,   136,   293,   142,    85,    14,    15,   136,    85,   138,
03005      139,   139,    85,   142,    68,   419,   564,   565,    85,   442,
03006      142,    85,   143,   475,   136,   443,   138,   139,    85,   109,
03007      142,   138,   139,   144,   482,   138,   139,   139,   400,   138,
03008      139,   445,   404,   137,   538,   407,    85,    87,    56,   532,
03009      504,   534,    52,   106,    54,    55,    56,    57,   139,   482,
03010      422,   138,   139,   106,    85,   427,   139,    85,   522,   109,
03011      641,   138,   139,   846,   138,   139,   528,   542,   530,   852,
03012      140,   138,   139,    87,   532,    87,   534,   603,    87,   554,
03013      542,    68,    68,    52,   542,    54,    55,    56,    57,   138,
03014      139,    17,   554,   140,   574,   109,   554,   109,   556,   557,
03015      109,   145,   564,   565,   566,   567,   520,   138,   139,   481,
03016      138,   139,    56,   541,   528,   416,    61,    94,   580,   583,
03017      557,   574,    68,   649,   425,   553,   140,   574,   140,   543,
03018      140,   140,    52,    25,   592,   597,   520,   143,   535,   536,
03019      137,   555,   140,   607,   528,   603,   574,   140,   140,   642,
03020      564,   565,   549,    61,   735,   592,    87,   738,   146,   104,
03021      105,   106,   666,    87,   626,    87,   628,   140,   630,   684,
03022      603,   140,   687,   119,   120,   121,   140,   935,   109,   641,
03023      564,   565,   596,   597,   642,   109,   698,   109,    61,    10,
03024       68,   649,     8,    54,   652,   653,   104,   105,   106,    13,
03025      658,   659,    63,    64,   666,   667,   109,   669,    61,   671,
03026      703,   704,   137,   652,   653,    52,   649,   681,   140,   658,
03027      659,    61,   936,   140,   140,    65,   684,   140,   692,   687,
03028      688,   104,   105,   106,    52,   140,   729,   730,   696,   117,
03029      118,   119,   120,   121,   706,   703,   704,   684,   741,   111,
03030      687,   104,   105,   106,   144,   836,    15,   838,    52,   140,
03031       54,    55,    56,    57,   104,   105,   728,   782,   145,   114,
03032      698,   729,   730,   193,   109,   140,   196,   197,    40,    41,
03033       42,    43,    44,   741,   140,   140,   779,   749,   685,   751,
03034       10,   753,   754,   786,   787,    89,   877,   790,   879,   140,
03035      697,    95,   883,    88,    16,    17,     9,   137,    20,    10,
03036       10,   769,   140,   806,   137,   777,    54,    55,   780,    57,
03037      140,   779,   694,   140,   782,    63,    64,   140,   786,   787,
03038      769,   140,   790,   137,    46,    47,   114,   140,   140,    51,
03039       52,   137,   140,   715,   925,   782,   927,    56,   806,   930,
03040       62,    63,   140,   140,   726,   416,   849,   819,   820,   140,
03041      822,    56,   824,   825,   945,   140,   140,   140,    87,   827,
03042      142,    52,   142,    54,    55,    56,    57,   539,   298,    89,
03043      889,   938,   722,   303,    92,   937,   967,   845,    95,    57,
03044       -1,   849,    90,   865,   827,   792,   858,   794,    68,   834,
03045      732,    52,   860,    54,    55,    56,    57,    -1,    89,   902,
03046       -1,   904,   845,    83,    84,    96,    -1,   910,    52,    -1,
03047       54,    55,    56,    57,    -1,    -1,    -1,   799,    -1,   891,
03048      892,   893,    -1,   895,   896,   116,    -1,    52,   810,    54,
03049       55,    56,    57,   815,   902,    -1,   904,   117,   118,   119,
03050      120,   121,   910,    -1,   912,    89,   918,   919,   920,   921,
03051      935,    95,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   389,
03052      390,    -1,    -1,   935,    89,   937,   938,   935,   398,    -1,
03053       -1,   193,    -1,    -1,   196,   197,   198,    -1,    -1,   951,
03054      952,   953,   954,   957,    -1,   923,    52,    -1,    54,    55,
03055       56,    57,   214,   965,   216,   217,   934,    -1,    -1,   429,
03056       -1,   973,   432,    -1,   676,    52,    -1,    54,    55,    56,
03057       57,    -1,   936,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03058       -1,   693,    -1,    89,    -1,    -1,    -1,    -1,    -1,    95,
03059       96,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03060       -1,    -1,    89,    -1,    -1,    -1,   476,    -1,    95,    96,
03061      116,    -1,    -1,   119,    -1,    -1,    -1,    -1,    -1,    -1,
03062       -1,    -1,    -1,     2,    -1,     4,    -1,    -1,    -1,   116,
03063       -1,    -1,   119,    -1,    -1,    -1,   298,    -1,    -1,   145,
03064       -1,   303,   304,   305,   306,   307,   308,   309,   310,   311,
03065      312,   313,   314,   315,   316,   317,   318,   319,   320,   321,
03066      322,   323,   324,   325,   326,   327,   328,   329,   538,   331,
03067       49,   783,    -1,   785,    53,    52,    -1,    54,    55,    56,
03068       57,    -1,    -1,   795,    -1,    -1,    -1,    -1,   800,    -1,
03069       -1,    -1,    -1,    -1,    -1,    -1,    75,    -1,    -1,    -1,
03070       -1,     2,    -1,     4,    -1,    -1,    -1,   577,    87,    88,
03071       89,    90,    89,    -1,    -1,    -1,   378,   379,    95,    96,
03072       -1,    -1,    -1,    -1,    -1,    -1,   388,   389,   390,    -1,
03073       -1,    -1,   394,    -1,   396,   397,   398,    -1,    -1,   116,
03074       -1,    -1,   119,   855,   856,    -1,    -1,    -1,    49,   628,
03075       -1,   630,    53,   415,    -1,    -1,    68,    52,   420,    54,
03076       55,    56,    57,    -1,    -1,   142,    -1,   429,    -1,    -1,
03077      432,    83,    84,     2,    75,     4,   646,    -1,    -1,    -1,
03078       -1,    -1,   444,    -1,    -1,    -1,    87,    88,    89,    -1,
03079        2,    -1,     4,    -1,    89,    -1,   666,    -1,    -1,   911,
03080       95,    96,   464,   465,   116,   117,   118,   119,   120,   121,
03081       -1,    -1,    -1,    -1,   476,    -1,   195,    -1,    -1,    -1,
03082       49,   116,    -1,    -1,   119,     0,    -1,   939,    -1,   941,
03083       -1,    -1,    -1,     8,     9,    10,    -1,    49,    13,    14,
03084       15,    52,    17,    54,    55,    56,    57,   142,   227,    -1,
03085      720,    -1,    27,    -1,    -1,    -1,    -1,    -1,    87,   238,
03086      239,    -1,    37,    38,    -1,    40,    41,    42,    43,    44,
03087       -1,    -1,   751,    -1,   753,   754,   538,    -1,    89,   258,
03088      542,    68,    -1,    -1,    95,    96,    -1,    -1,   758,    -1,
03089       -1,    -1,   554,    -1,   195,    -1,    83,    84,    -1,    -1,
03090       -1,    -1,    -1,    -1,    -1,   116,    -1,    -1,   119,   288,
03091       85,    -1,    -1,    -1,   293,   577,    -1,    -1,    -1,   789,
03092       -1,   300,   301,    -1,    -1,    -1,   227,   114,   115,   116,
03093      117,   118,   119,   120,   121,    -1,    -1,   238,   239,    -1,
03094      819,   820,    -1,   822,    -1,   824,   825,    -1,    -1,    -1,
03095       -1,    -1,    -1,    -1,   333,    -1,    -1,   258,    -1,    -1,
03096       -1,    -1,   137,    -1,   139,    -1,   195,   142,   143,    -1,
03097      145,    -1,   147,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03098       -1,    -1,    -1,   195,   646,    -1,    -1,   288,   650,    -1,
03099      652,   653,   293,    -1,    -1,    -1,   658,   659,   227,   300,
03100      301,    -1,    -1,    -1,   666,    -1,    -1,    -1,    -1,   238,
03101      239,    -1,   891,   892,   893,   227,   895,   896,    -1,    -1,
03102       -1,    -1,    -1,    -1,    -1,    -1,   238,   239,    -1,    -1,
03103       -1,    -1,   333,    -1,    -1,    -1,    -1,   416,    -1,   918,
03104      919,   920,   921,   705,    -1,    -1,   425,    -1,   710,   711,
03105       -1,   713,   714,    -1,    -1,    -1,    -1,    -1,   720,   288,
03106       -1,    -1,    -1,   442,   293,    -1,    -1,    -1,    -1,    -1,
03107       -1,   300,   951,   952,   953,   954,   288,    -1,    -1,    -1,
03108       -1,   293,    -1,    -1,    -1,    -1,   965,    -1,   300,    -1,
03109       -1,    -1,    -1,    -1,   973,    -1,   758,    -1,    -1,    -1,
03110      762,    -1,    -1,   482,   333,    -1,    -1,   769,    -1,    -1,
03111       -1,    -1,    -1,    -1,    -1,   416,    -1,    -1,    -1,    -1,
03112       -1,   333,    -1,    -1,   425,    -1,    -1,   789,    -1,    -1,
03113       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03114       -1,   442,    -1,    -1,    -1,   807,    -1,    -1,    -1,    -1,
03115       -1,    -1,    -1,   532,    -1,   534,    -1,    -1,    -1,    -1,
03116       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03117       68,    69,    70,    71,    72,    73,    74,   556,    -1,    77,
03118       78,   482,    -1,    -1,    -1,    83,    84,   416,    -1,    -1,
03119       -1,    -1,    -1,    -1,    -1,    -1,   425,    -1,    -1,    -1,
03120       -1,    -1,    -1,    -1,   416,    -1,    -1,    -1,    -1,    -1,
03121       44,    -1,    -1,   425,   112,   113,   114,   115,   116,   117,
03122      118,   119,   120,   121,   603,    -1,    -1,    -1,    -1,    -1,
03123       -1,   532,    -1,   534,    68,    69,    70,    71,    72,    73,
03124       74,    75,    76,    77,    78,    79,    80,    -1,    -1,    83,
03125       84,    -1,    -1,    -1,    -1,   556,    -1,    -1,    -1,    -1,
03126       -1,    -1,    -1,   642,    -1,    -1,    -1,    -1,    -1,    -1,
03127      649,    -1,    -1,   935,    -1,    -1,   110,    -1,   112,   113,
03128      114,   115,   116,   117,   118,   119,   120,   121,    -1,    -1,
03129       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03130       -1,    -1,   603,   532,    -1,   534,   140,    -1,    -1,   688,
03131       -1,    -1,    -1,    -1,    -1,    -1,    -1,   696,    -1,    -1,
03132      532,    -1,   534,    -1,   703,   704,    -1,   556,    -1,    -1,
03133       -1,    -1,    -1,   634,    -1,    -1,    -1,    -1,    -1,    -1,
03134       -1,   642,    -1,    -1,   556,    -1,    -1,    -1,   649,    -1,
03135      729,   730,    -1,    -1,    52,    53,    -1,    -1,    56,    -1,
03136       -1,    -1,   741,    -1,    -1,    -1,    -1,    -1,    66,    67,
03137       68,    69,    70,    71,    72,    73,    74,    -1,    -1,    77,
03138       78,    -1,    -1,    81,    82,    83,    84,   688,    -1,    -1,
03139       -1,    -1,    -1,    -1,    -1,   696,    -1,    95,    -1,    -1,
03140      779,    -1,   703,   704,    -1,    -1,    -1,   786,   787,    -1,
03141       -1,   790,    -1,   642,   112,   113,   114,   115,   116,   117,
03142      118,   119,   120,   121,    -1,   123,   124,   806,   729,   730,
03143      642,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03144      741,    -1,    -1,   141,   142,    -1,    -1,    -1,   827,    -1,
03145       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   688,
03146       -1,    -1,    -1,    -1,    -1,    -1,   845,   696,    -1,    -1,
03147      849,    -1,    -1,    -1,   703,   704,   688,    -1,   779,    -1,
03148       -1,   860,    -1,    -1,   696,   786,   787,    -1,    -1,   790,
03149       -1,   703,   704,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03150      729,   730,    -1,    -1,    -1,   806,    -1,    -1,    -1,    -1,
03151       -1,    -1,   741,    -1,    -1,    -1,    -1,   729,   730,    -1,
03152       -1,    -1,    -1,   902,    -1,   904,   827,    -1,    -1,   741,
03153       -1,   910,    -1,   912,    -1,    -1,    -1,    68,    69,    70,
03154       71,    72,    73,    74,   845,    -1,    77,    78,   849,    -1,
03155      779,    -1,    83,    84,    -1,    -1,    -1,   786,   787,   860,
03156       -1,   790,    -1,    46,    47,    -1,    -1,   779,    51,    52,
03157       53,    -1,    -1,    -1,   786,   787,    -1,   806,   790,    -1,
03158       63,   112,   113,   114,   115,   116,   117,   118,   119,   120,
03159      121,    -1,    75,    -1,   806,    -1,    -1,    -1,    -1,    -1,
03160       -1,   902,    -1,   904,    87,    88,    89,    -1,    -1,   910,
03161       -1,   912,    -1,    -1,    -1,    -1,   845,    -1,    -1,    -1,
03162      849,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03163       -1,   860,    -1,    -1,    -1,    -1,    -1,   849,    -1,    -1,
03164       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   860,    -1,
03165       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03166       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03167       -1,    -1,    -1,   902,    -1,   904,    -1,    -1,    -1,    -1,
03168       -1,   910,    -1,   912,    -1,    -1,    -1,    -1,    -1,    -1,
03169      902,    -1,   904,    -1,    -1,    -1,    -1,    -1,   910,    -1,
03170      912,    -1,    52,    53,    -1,    -1,    56,    -1,    -1,    -1,
03171      193,    -1,    -1,   196,   197,   198,    66,    67,    68,    69,
03172       70,    71,    72,    73,    74,    -1,    -1,    77,    78,    -1,
03173       -1,    81,    82,    83,    84,    -1,    -1,    68,    69,    70,
03174       71,    72,    73,    74,    75,    95,    77,    78,    -1,    -1,
03175       -1,    -1,    83,    84,    -1,    -1,    -1,    -1,    -1,    -1,
03176       -1,    -1,   112,   113,   114,   115,   116,   117,   118,   119,
03177      120,   121,    -1,   123,   124,   258,    -1,    -1,    -1,    -1,
03178       -1,   112,   113,   114,   115,   116,   117,   118,   119,   120,
03179      121,   141,   142,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03180       -1,    -1,    -1,    -1,    68,    69,    70,    71,    72,    73,
03181       74,    75,    76,    77,    78,    79,    80,    -1,   301,    83,
03182       84,   304,   305,   306,   307,   308,   309,   310,   311,   312,
03183      313,   314,   315,   316,   317,   318,   319,   320,   321,   322,
03184      323,   324,   325,   326,   327,   328,   329,    -1,   112,   113,
03185      114,   115,   116,   117,   118,   119,   120,   121,    52,    53,
03186       -1,    -1,    56,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03187       -1,    -1,    66,    67,    68,    69,    70,    71,    72,    73,
03188       74,    -1,    -1,    77,    78,    -1,    -1,    81,    82,    83,
03189       84,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03190       -1,    95,    -1,    -1,    -1,   388,   389,   390,    -1,    -1,
03191       -1,    -1,    -1,   396,   397,   398,    -1,    -1,   112,   113,
03192      114,   115,   116,   117,   118,   119,   120,   121,    -1,   123,
03193      124,    -1,   415,    -1,    -1,    -1,    -1,   420,    -1,    -1,
03194       -1,    -1,    -1,    -1,    -1,    -1,   429,   141,   142,   432,
03195       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   442,
03196       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03197       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03198       -1,   464,   465,    -1,     0,     1,    -1,     3,     4,     5,
03199        6,     7,    -1,   476,    -1,    11,    12,    -1,    -1,   482,
03200       16,    -1,    18,    19,    20,    21,    22,    23,    24,    -1,
03201       -1,    -1,    -1,    -1,    30,    31,    32,    33,    34,    35,
03202       36,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    45,
03203       46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
03204       56,    57,    -1,    59,    60,    -1,    62,    63,    64,    -1,
03205       66,    67,    -1,    -1,    -1,   538,    -1,    -1,    -1,    -1,
03206       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03207       86,    -1,    -1,    89,    90,    -1,    92,    93,    -1,    95,
03208       -1,    97,    98,    99,   100,   101,   102,   103,    -1,    -1,
03209       -1,    -1,    -1,    -1,   577,    -1,    -1,    -1,    -1,    -1,
03210       -1,    -1,    -1,    -1,    -1,    -1,   122,   123,   124,    -1,
03211       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03212      603,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   145,
03213       -1,   147,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03214       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03215       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03216       -1,    -1,    -1,   646,    -1,    -1,   649,   650,    -1,    -1,
03217       -1,     0,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     8,
03218        9,    10,    -1,   666,    13,    14,    15,    -1,    17,    -1,
03219       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    27,    28,
03220       29,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    37,    38,
03221       -1,    40,    41,    42,    43,    44,    -1,    -1,    -1,    -1,
03222       -1,    -1,   705,    -1,    -1,    -1,    -1,   710,   711,    -1,
03223      713,   714,    -1,    -1,    -1,    -1,    -1,   720,    -1,    68,
03224       69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
03225       79,    80,    -1,    -1,    83,    84,    85,    -1,    87,    88,
03226       -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,    -1,    -1,
03227       -1,    -1,    -1,    -1,    -1,   758,    -1,    -1,   107,   762,
03228      109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
03229      119,   120,   121,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03230       -1,    -1,    -1,    -1,    -1,    -1,   789,    -1,   137,   138,
03231      139,   140,     0,    -1,   143,   144,   145,    -1,   147,    -1,
03232        8,     9,    10,    -1,   807,    13,    14,    15,    -1,    17,
03233       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    26,    27,
03234       28,    -1,    -1,    -1,   827,    -1,    -1,    -1,    -1,    37,
03235       38,    -1,    40,    41,    42,    43,    44,    -1,    -1,    -1,
03236       -1,    -1,   845,    68,    69,    70,    71,    72,    73,    74,
03237       75,    76,    77,    78,    79,    80,    -1,    -1,    83,    84,
03238       68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
03239       78,    79,    80,    -1,    -1,    83,    84,    85,    -1,    -1,
03240       88,    -1,    -1,    -1,    -1,   110,    94,   112,   113,   114,
03241      115,   116,   117,   118,   119,   120,   121,    -1,    -1,    -1,
03242       -1,    -1,   110,    -1,   112,   113,   114,   115,   116,   117,
03243      118,   119,   120,   121,    -1,    -1,    -1,    -1,    -1,    -1,
03244       -1,    -1,   147,    -1,    -1,    -1,    -1,    -1,   136,   137,
03245      138,   139,   140,     0,   142,   143,   144,   145,    -1,   147,
03246       -1,     8,     9,    10,    -1,    -1,    13,    14,    15,    -1,
03247       17,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03248       27,    28,    29,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03249       37,    38,    -1,    40,    41,    42,    43,    44,    -1,    -1,
03250       -1,    -1,    -1,    -1,    68,    69,    70,    71,    72,    73,
03251       74,    75,    76,    77,    78,    79,    80,    -1,    -1,    83,
03252       84,    68,    69,    70,    71,    72,    73,    74,    75,    76,
03253       77,    78,    79,    80,    -1,    -1,    83,    84,    85,    -1,
03254       -1,    88,    -1,    -1,    -1,    -1,   110,    94,   112,   113,
03255      114,   115,   116,   117,   118,   119,   120,   121,    -1,    -1,
03256      107,    -1,    -1,   110,   111,   112,   113,   114,   115,   116,
03257      117,   118,   119,   120,   121,    -1,    -1,    -1,    -1,    -1,
03258       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03259      137,   138,   139,   140,     0,    -1,   143,   144,   145,    -1,
03260      147,    -1,     8,     9,    10,    -1,    -1,    13,    14,    15,
03261       -1,    17,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03262       26,    27,    28,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03263       -1,    37,    38,    -1,    40,    41,    42,    43,    44,    -1,
03264       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03265       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03266       -1,    -1,    68,    69,    70,    71,    72,    73,    74,    75,
03267       76,    77,    78,    79,    80,    -1,    -1,    83,    84,    85,
03268       -1,    -1,    88,    -1,    -1,    -1,    -1,    -1,    94,    -1,
03269       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03270       -1,    -1,    -1,    -1,   110,    -1,   112,   113,   114,   115,
03271      116,   117,   118,   119,   120,   121,    -1,    -1,    -1,    -1,
03272       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03273      136,   137,   138,   139,   140,     0,   142,   143,   144,   145,
03274       -1,   147,    -1,     8,     9,    10,    -1,    -1,    13,    14,
03275       15,    -1,    17,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03276       -1,    -1,    27,    28,    -1,    -1,    -1,    -1,    -1,    -1,
03277       -1,    -1,    37,    38,    -1,    40,    41,    42,    43,    44,
03278       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03279       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03280       -1,    -1,    -1,    68,    69,    70,    71,    72,    73,    74,
03281       75,    76,    77,    78,    79,    80,    -1,    -1,    83,    84,
03282       85,    -1,    -1,    88,    -1,    -1,    -1,    -1,    -1,    94,
03283       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03284       -1,    -1,    -1,    -1,    -1,   110,    -1,   112,   113,   114,
03285      115,   116,   117,   118,   119,   120,   121,    -1,    -1,    -1,
03286       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03287       -1,    -1,   137,   138,   139,   140,     0,   142,   143,   144,
03288      145,    -1,   147,    -1,     8,     9,    10,    -1,    -1,    -1,
03289       14,    15,    -1,    17,    -1,    -1,    -1,    -1,    -1,    -1,
03290       -1,    -1,    26,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03291       -1,    -1,    -1,    37,    38,    -1,    40,    41,    42,    43,
03292       44,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03293       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03294       -1,    -1,    -1,    -1,    68,    69,    70,    71,    72,    73,
03295       74,    75,    76,    77,    78,    79,    80,    -1,    -1,    83,
03296       84,    85,     0,    87,    -1,    -1,    -1,    -1,    -1,    -1,
03297        8,     9,    10,    -1,    -1,    -1,    14,    15,    -1,    17,
03298       -1,    -1,    -1,    -1,    -1,   109,   110,    -1,   112,   113,
03299      114,   115,   116,   117,   118,   119,   120,   121,    -1,    37,
03300       38,    -1,    40,    41,    42,    43,    44,    -1,    -1,    -1,
03301       -1,    -1,   136,   137,   138,   139,   140,    -1,    -1,   143,
03302       -1,   145,    -1,   147,    -1,    -1,    -1,    -1,    -1,    -1,
03303       68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
03304       78,    79,    80,    -1,    -1,    83,    84,    85,    -1,    87,
03305       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03306       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03307       -1,   109,   110,    -1,   112,   113,   114,   115,   116,   117,
03308      118,   119,   120,   121,    -1,    -1,    -1,    -1,    -1,    -1,
03309       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   137,
03310      138,   139,   140,    -1,    -1,   143,    -1,   145,     1,   147,
03311        3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
03312       -1,    -1,    15,    16,    -1,    18,    19,    20,    21,    22,
03313       23,    24,    -1,    -1,    -1,    -1,    -1,    30,    31,    32,
03314       33,    34,    35,    36,    -1,    -1,    39,    -1,    -1,    -1,
03315       -1,    -1,    45,    46,    -1,    48,    49,    50,    51,    52,
03316       53,    54,    55,    56,    57,    -1,    59,    60,    -1,    62,
03317       63,    64,    -1,    66,    67,    -1,    -1,    -1,    -1,    -1,
03318       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03319       -1,    -1,    -1,    86,    -1,    -1,    89,    90,    -1,    92,
03320       93,    -1,    95,    -1,    97,    98,    99,   100,   101,   102,
03321      103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03322       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   122,
03323      123,   124,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03324       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03325       -1,    -1,   145,     1,   147,     3,     4,     5,     6,     7,
03326       -1,    -1,    10,    11,    12,    -1,    14,    15,    16,    -1,
03327       18,    19,    20,    21,    22,    23,    24,    -1,    -1,    -1,
03328       -1,    -1,    30,    31,    32,    33,    34,    35,    36,    -1,
03329       -1,    39,    -1,    -1,    -1,    -1,    -1,    45,    46,    -1,
03330       48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
03331       -1,    59,    60,    -1,    62,    63,    64,    -1,    66,    67,
03332       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03333       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,
03334       -1,    89,    90,    -1,    92,    93,    -1,    95,    -1,    97,
03335       98,    99,   100,   101,   102,   103,    -1,    -1,    -1,    -1,
03336       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03337       -1,    -1,    -1,    -1,   122,   123,   124,    -1,    -1,    -1,
03338       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03339       -1,    -1,    -1,    -1,    -1,    -1,    -1,   145,     1,   147,
03340        3,     4,     5,     6,     7,    -1,    -1,    10,    11,    12,
03341       -1,    -1,    15,    16,    17,    18,    19,    20,    21,    22,
03342       23,    24,    -1,    -1,    -1,    -1,    -1,    30,    31,    32,
03343       33,    34,    35,    36,    -1,    -1,    39,    -1,    -1,    -1,
03344       -1,    -1,    45,    46,    -1,    48,    49,    50,    51,    52,
03345       53,    54,    55,    56,    57,    -1,    59,    60,    -1,    62,
03346       63,    64,    -1,    66,    67,    -1,    -1,    -1,    -1,    -1,
03347       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03348       -1,    -1,    -1,    86,    -1,    -1,    89,    90,    -1,    92,
03349       93,    -1,    95,    -1,    97,    98,    99,   100,   101,   102,
03350      103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03351       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   122,
03352      123,   124,    -1,    -1,    -1,    -1,    -1,    -1,     1,    -1,
03353        3,     4,     5,     6,     7,    -1,    -1,    -1,    11,    12,
03354       -1,    -1,   145,    16,   147,    18,    19,    20,    21,    22,
03355       23,    24,    -1,    -1,    -1,    -1,    -1,    30,    31,    32,
03356       33,    34,    35,    36,    -1,    -1,    39,    -1,    -1,    -1,
03357       -1,    -1,    45,    46,    47,    48,    49,    50,    51,    52,
03358       53,    54,    55,    56,    57,    -1,    59,    60,    -1,    62,
03359       63,    64,    -1,    66,    67,    -1,    -1,    -1,    -1,    -1,
03360       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03361       -1,    -1,    -1,    86,    -1,    -1,    89,    90,    -1,    92,
03362       93,    -1,    95,    -1,    97,    98,    99,   100,   101,   102,
03363      103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03364       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   122,
03365      123,   124,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03366       -1,    -1,    -1,    -1,   137,    -1,    -1,    -1,    -1,    -1,
03367       -1,    -1,   145,     1,   147,     3,     4,     5,     6,     7,
03368       -1,    -1,    10,    11,    12,    -1,    -1,    15,    16,    -1,
03369       18,    19,    20,    21,    22,    23,    24,    -1,    -1,    -1,
03370       -1,    -1,    30,    31,    32,    33,    34,    35,    36,    -1,
03371       -1,    39,    -1,    -1,    -1,    -1,    -1,    45,    46,    -1,
03372       48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
03373       -1,    59,    60,    -1,    62,    63,    64,    -1,    66,    67,
03374       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03375       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,
03376       -1,    89,    90,    -1,    92,    93,    -1,    95,    -1,    97,
03377       98,    99,   100,   101,   102,   103,    -1,    -1,    -1,    -1,
03378       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03379       -1,    -1,    -1,    -1,   122,   123,   124,    -1,    -1,    -1,
03380       -1,    -1,    -1,     1,    -1,     3,     4,     5,     6,     7,
03381       -1,     9,    10,    11,    12,    -1,    -1,   145,    16,   147,
03382       18,    19,    20,    21,    22,    23,    24,    -1,    -1,    -1,
03383       -1,    -1,    30,    31,    32,    33,    34,    35,    36,    -1,
03384       -1,    39,    -1,    -1,    -1,    -1,    -1,    45,    46,    -1,
03385       48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
03386       -1,    59,    60,    -1,    62,    63,    64,    -1,    66,    67,
03387       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03388       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,
03389       -1,    89,    90,    -1,    92,    93,    -1,    95,    -1,    97,
03390       98,    99,   100,   101,   102,   103,    -1,    -1,    -1,    -1,
03391       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03392       -1,    -1,    -1,    -1,   122,   123,   124,    -1,    -1,    -1,
03393       -1,    -1,    -1,     1,    -1,     3,     4,     5,     6,     7,
03394       -1,    -1,    -1,    11,    12,    -1,    -1,   145,    16,   147,
03395       18,    19,    20,    21,    22,    23,    24,    -1,    -1,    -1,
03396       -1,    -1,    30,    31,    32,    33,    34,    35,    36,    -1,
03397       -1,    39,    -1,    -1,    -1,    -1,    -1,    45,    46,    -1,
03398       48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
03399       -1,    59,    60,    -1,    62,    63,    64,    -1,    66,    67,
03400       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03401       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,
03402       -1,    89,    90,    -1,    92,    93,    -1,    95,    -1,    97,
03403       98,    99,   100,   101,   102,   103,    -1,    -1,    -1,    -1,
03404       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03405       -1,    -1,    -1,    -1,   122,   123,   124,    -1,    -1,    -1,
03406       -1,    -1,    -1,     1,    -1,     3,     4,     5,     6,     7,
03407       -1,    -1,    -1,    11,    12,   143,    -1,   145,    16,   147,
03408       18,    19,    20,    21,    22,    23,    24,    -1,    -1,    -1,
03409       -1,    -1,    30,    31,    32,    33,    34,    35,    36,    -1,
03410       -1,    39,    -1,    -1,    -1,    -1,    -1,    45,    46,    -1,
03411       48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
03412       -1,    59,    60,    -1,    62,    63,    64,    -1,    66,    67,
03413       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03414       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,
03415       -1,    89,    90,    -1,    92,    93,    -1,    95,    -1,    97,
03416       98,    99,   100,   101,   102,   103,    -1,    -1,    -1,    -1,
03417       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03418       -1,    -1,    -1,    -1,   122,   123,   124,    -1,    -1,    -1,
03419       -1,    -1,    -1,     1,    -1,     3,     4,     5,     6,     7,
03420       -1,    -1,    -1,    11,    12,   143,    -1,   145,    16,   147,
03421       18,    19,    20,    21,    22,    23,    24,    -1,    -1,    -1,
03422       -1,    -1,    30,    31,    32,    33,    34,    35,    36,    -1,
03423       -1,    39,    -1,    -1,    -1,    -1,    -1,    45,    46,    -1,
03424       48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
03425       -1,    59,    60,    -1,    62,    63,    64,    -1,    66,    67,
03426       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03427       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,
03428       -1,    89,    90,    -1,    92,    93,    -1,    95,    -1,    97,
03429       98,    99,   100,   101,   102,   103,    -1,    -1,    -1,    -1,
03430       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03431       -1,    -1,    -1,    -1,   122,   123,   124,    -1,    -1,    -1,
03432       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   137,
03433       -1,    -1,    -1,    -1,    -1,    -1,    -1,   145,     1,   147,
03434        3,     4,     5,     6,     7,    -1,    -1,    10,    11,    12,
03435       -1,    -1,    -1,    16,    -1,    18,    19,    20,    21,    22,
03436       23,    24,    -1,    -1,    -1,    -1,    -1,    30,    31,    32,
03437       33,    34,    35,    36,    -1,    -1,    39,    -1,    -1,    -1,
03438       -1,    -1,    45,    46,    -1,    48,    49,    50,    51,    52,
03439       53,    54,    55,    56,    57,    -1,    59,    60,    -1,    62,
03440       63,    64,    -1,    66,    67,    -1,    -1,    -1,    -1,    -1,
03441       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03442       -1,    -1,    -1,    86,    -1,    -1,    89,    90,    -1,    92,
03443       93,    -1,    95,    -1,    97,    98,    99,   100,   101,   102,
03444      103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03445       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   122,
03446      123,   124,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03447        3,     4,     5,    -1,     7,    -1,    -1,    -1,    11,    12,
03448       -1,    -1,   145,    16,   147,    18,    19,    20,    21,    22,
03449       23,    24,    -1,    -1,    -1,    -1,    -1,    30,    31,    32,
03450       33,    34,    35,    36,    -1,    -1,    39,    -1,    -1,    -1,
03451       -1,    -1,    -1,    46,    -1,    -1,    49,    50,    51,    52,
03452       53,    54,    55,    56,    57,    58,    59,    60,    -1,    62,
03453       63,    64,    -1,    66,    67,    -1,    -1,    -1,    -1,    -1,
03454       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03455       -1,    -1,    -1,    86,    -1,    -1,    89,    90,    -1,    92,
03456       93,    -1,    95,    96,    97,    98,    99,   100,   101,   102,
03457      103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,
03458        4,     5,    -1,     7,    -1,    -1,    -1,    11,    12,   122,
03459      123,   124,    16,    -1,    18,    19,    20,    21,    22,    23,
03460       24,    -1,    -1,    -1,    -1,    -1,    30,    31,    32,    33,
03461       34,    35,    36,    -1,   147,    39,    -1,    -1,    -1,    -1,
03462       -1,    -1,    46,    -1,    -1,    49,    50,    51,    52,    53,
03463       54,    55,    56,    57,    -1,    59,    60,    -1,    62,    63,
03464       64,    -1,    66,    67,    -1,    -1,    -1,    -1,    -1,    -1,
03465       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03466       -1,    -1,    86,    -1,    -1,    89,    90,    -1,    92,    93,
03467       -1,    -1,    -1,    97,    98,    99,   100,   101,   102,   103,
03468       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03469       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   122,   123,
03470      124,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,
03471        4,     5,    -1,     7,    -1,    -1,    -1,    11,    12,    -1,
03472       -1,   145,    16,   147,    18,    19,    20,    21,    22,    23,
03473       24,    -1,    -1,    -1,    -1,    -1,    30,    31,    32,    33,
03474       34,    35,    36,    -1,    -1,    39,    -1,    -1,    -1,    -1,
03475       -1,    -1,    46,    -1,    -1,    49,    50,    51,    52,    53,
03476       54,    55,    56,    57,    -1,    59,    60,    -1,    62,    63,
03477       64,    -1,    66,    67,    -1,    -1,    -1,    -1,    -1,    -1,
03478       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03479       -1,    -1,    86,    -1,    -1,    89,    90,    -1,    92,    93,
03480       -1,    -1,    -1,    97,    98,    99,   100,   101,   102,   103,
03481       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,
03482        5,     6,     7,    -1,    -1,    -1,    11,    12,   122,   123,
03483      124,    16,    -1,    18,    19,    20,    21,    22,    23,    24,
03484       -1,    -1,    -1,    -1,    -1,    30,    31,    32,    33,    34,
03485       35,    36,    -1,   147,    39,    -1,    -1,    -1,    -1,    -1,
03486       45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
03487       55,    56,    57,    -1,    59,    60,    -1,    62,    63,    64,
03488       -1,    66,    67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03489       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03490       -1,    86,    -1,    -1,    89,    90,    -1,    92,    93,    -1,
03491       95,    -1,    97,    98,    99,   100,   101,   102,   103,    -1,
03492       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03493       -1,    -1,    -1,    -1,    -1,    -1,    -1,   122,   123,   124,
03494       -1,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,     6,
03495        7,    -1,    -1,    -1,    11,    12,    -1,    -1,    -1,    16,
03496      145,    18,    19,    20,    21,    22,    23,    24,    -1,    -1,
03497       -1,    -1,    -1,    30,    31,    32,    33,    34,    35,    36,
03498       -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    45,    46,
03499       -1,    48,    49,    50,    51,    52,    53,    54,    55,    56,
03500       57,    -1,    59,    60,    -1,    62,    63,    64,    -1,    66,
03501       67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03502       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,
03503       -1,    -1,    89,    90,    -1,    92,    93,    -1,    95,    -1,
03504       97,    98,    99,   100,   101,   102,   103,    -1,    -1,    -1,
03505       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03506       -1,    -1,    -1,    -1,    -1,   122,   123,   124,    -1,    -1,
03507       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03508       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   145,     3,
03509        4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
03510       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
03511       24,    25,    26,    -1,    -1,    -1,    30,    31,    32,    33,
03512       34,    35,    36,    37,    38,    39,    -1,    -1,    -1,    -1,
03513       -1,    45,    46,    47,    48,    49,    50,    51,    52,    53,
03514       54,    55,    56,    57,    -1,    -1,    -1,    -1,    -1,    -1,
03515       -1,    -1,    66,    67,    68,    69,    70,    71,    72,    73,
03516       74,    -1,    -1,    77,    78,    -1,    -1,    81,    82,    83,
03517       84,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03518       -1,    95,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03519       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   112,   113,
03520      114,   115,   116,   117,   118,   119,   120,   121,    -1,   123,
03521      124,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,    -1,
03522        7,    -1,    -1,    -1,    11,    12,    -1,   141,   142,    16,
03523       -1,    18,    19,    20,    21,    22,    23,    24,    -1,    26,
03524       -1,    -1,    -1,    30,    31,    32,    33,    34,    35,    36,
03525       -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,    46,
03526       -1,    -1,    49,    50,    51,    52,    53,    54,    55,    56,
03527       57,    58,    59,    60,    -1,    62,    63,    64,    -1,    66,
03528       67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03529       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,
03530       -1,    -1,    89,    90,    -1,    92,    93,    -1,    95,    96,
03531       97,    98,    99,   100,   101,   102,   103,    -1,    -1,    -1,
03532       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03533       -1,    -1,    -1,    -1,    -1,   122,   123,   124,    -1,    -1,
03534       -1,    -1,    -1,     3,     4,     5,    -1,     7,    -1,   136,
03535       -1,    11,    12,    -1,    -1,   142,    16,    -1,    18,    19,
03536       20,    21,    22,    23,    24,    -1,    26,    -1,    -1,    -1,
03537       30,    31,    32,    33,    34,    35,    36,    -1,    -1,    39,
03538       -1,    -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,    49,
03539       50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
03540       60,    -1,    62,    63,    64,    -1,    66,    67,    -1,    -1,
03541       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03542       -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,    89,
03543       90,    -1,    92,    93,    -1,    95,    96,    97,    98,    99,
03544      100,   101,   102,   103,    -1,    -1,    -1,    -1,    -1,    -1,
03545       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03546       -1,    -1,   122,   123,   124,    -1,    -1,    -1,    -1,    -1,
03547        3,     4,     5,    -1,     7,    -1,   136,    -1,    11,    12,
03548       -1,    -1,   142,    16,    -1,    18,    19,    20,    21,    22,
03549       23,    24,    -1,    -1,    -1,    -1,    -1,    30,    31,    32,
03550       33,    34,    35,    36,    -1,    -1,    39,    -1,    -1,    -1,
03551       -1,    -1,    -1,    46,    -1,    -1,    49,    50,    51,    52,
03552       53,    54,    55,    56,    57,    58,    59,    60,    -1,    62,
03553       63,    64,    -1,    66,    67,    -1,    -1,    -1,    -1,    -1,
03554       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03555       -1,    -1,    -1,    86,    87,    -1,    89,    90,    -1,    92,
03556       93,    -1,    95,    96,    97,    98,    99,   100,   101,   102,
03557      103,    -1,    -1,    -1,    -1,    -1,   109,    -1,    -1,    -1,
03558       -1,    -1,    -1,    -1,     3,     4,     5,    -1,     7,   122,
03559      123,   124,    11,    12,    -1,    -1,    -1,    16,    -1,    18,
03560       19,    20,    21,    22,    23,    24,    -1,    -1,    -1,   142,
03561       -1,    30,    31,    32,    33,    34,    35,    36,    -1,    -1,
03562       39,    -1,    -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,
03563       49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
03564       59,    60,    -1,    62,    63,    64,    -1,    66,    67,    -1,
03565       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03566       -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,
03567       89,    90,    -1,    92,    93,    -1,    95,    96,    97,    98,
03568       99,   100,   101,   102,   103,    -1,    -1,    -1,    -1,    -1,
03569       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,
03570        5,    -1,     7,   122,   123,   124,    11,    12,    -1,    -1,
03571       -1,    16,    -1,    18,    19,    20,    21,    22,    23,    24,
03572       -1,    -1,    -1,   142,    -1,    30,    31,    32,    33,    34,
03573       35,    36,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,
03574       -1,    46,    -1,    -1,    49,    50,    51,    52,    53,    54,
03575       55,    56,    57,    58,    59,    60,    -1,    62,    63,    64,
03576       -1,    66,    67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03577       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03578       -1,    86,    -1,    -1,    89,    90,    -1,    92,    93,    -1,
03579       95,    96,    97,    98,    99,   100,   101,   102,   103,    -1,
03580       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03581       -1,    -1,    -1,    -1,    -1,    -1,    -1,   122,   123,   124,
03582       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03583       -1,    -1,    -1,    -1,    -1,    -1,    -1,   142,     3,     4,
03584        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
03585       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
03586       25,    26,    -1,    -1,    -1,    30,    31,    32,    33,    34,
03587       35,    36,    37,    38,    39,    -1,    -1,    -1,    -1,    -1,
03588       45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
03589       55,    56,    57,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03590       -1,    66,    67,    68,    69,    70,    71,    72,    73,    74,
03591       -1,    -1,    77,    78,    -1,    -1,    81,    82,    83,    84,
03592       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03593       95,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03594       -1,    -1,    -1,    -1,    -1,    -1,    -1,   112,   113,   114,
03595      115,   116,   117,   118,   119,   120,   121,    -1,   123,   124,
03596       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03597       -1,    -1,    -1,    -1,    -1,    -1,   141,     3,     4,     5,
03598        6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
03599       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
03600       26,    -1,    -1,    -1,    30,    31,    32,    33,    34,    35,
03601       36,    37,    38,    39,    -1,    -1,    -1,    -1,    -1,    45,
03602       46,    47,    48,    49,    50,    51,    52,    53,    54,    -1,
03603       56,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03604       66,    67,    68,    69,    70,    71,    72,    73,    74,    -1,
03605       -1,    77,    78,    -1,    -1,    81,    82,    83,    84,    -1,
03606       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    95,
03607       -1,    -1,    98,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03608       -1,    -1,    -1,    -1,    -1,    -1,   112,   113,   114,   115,
03609      116,   117,   118,   119,   120,   121,    -1,   123,   124,    -1,
03610       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03611       -1,    -1,    -1,    -1,    -1,   141,     3,     4,     5,     6,
03612        7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
03613       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
03614       -1,    -1,    -1,    30,    31,    32,    33,    34,    35,    36,
03615       37,    38,    39,    -1,    -1,    -1,    -1,    -1,    45,    46,
03616       47,    48,    49,    50,    51,    52,    53,    -1,    -1,    56,
03617       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,
03618       67,    68,    69,    70,    71,    72,    73,    74,    -1,    -1,
03619       77,    78,    -1,    -1,    81,    82,    83,    84,    -1,    -1,
03620       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    95,    -1,
03621       -1,    98,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03622       -1,    -1,    -1,    -1,    -1,   112,   113,   114,   115,   116,
03623      117,   118,   119,   120,   121,    -1,   123,   124,    -1,    -1,
03624       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03625       -1,    -1,    -1,    -1,   141,     3,     4,     5,     6,     7,
03626        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
03627       18,    19,    20,    21,    22,    23,    24,    25,    26,    -1,
03628       -1,    -1,    30,    31,    32,    33,    34,    35,    36,    37,
03629       38,    39,    -1,    -1,    -1,    -1,    -1,    45,    46,    47,
03630       48,    49,    50,    51,    52,    53,    -1,    -1,    56,    -1,
03631       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,    67,
03632       68,    69,    70,    71,    72,    73,    74,    -1,    -1,    77,
03633       78,    -1,    -1,    81,    82,    83,    84,    -1,    -1,    -1,
03634       -1,    -1,    -1,    -1,    -1,    -1,    -1,    95,    -1,    -1,
03635       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03636       -1,    -1,    -1,    -1,   112,   113,   114,   115,   116,   117,
03637      118,   119,   120,   121,    -1,   123,   124,    -1,    -1,     3,
03638        4,     5,    -1,     7,    -1,    -1,    -1,    11,    12,    -1,
03639       -1,    -1,    16,   141,    18,    19,    20,    21,    22,    23,
03640       24,    -1,    -1,    -1,    -1,    -1,    30,    31,    32,    33,
03641       34,    35,    36,    -1,    -1,    39,    -1,    -1,    -1,    -1,
03642       -1,    -1,    46,    -1,    -1,    49,    50,    51,    52,    53,
03643       54,    55,    56,    57,    -1,    59,    60,    -1,    62,    63,
03644       64,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03645       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03646       -1,    -1,    86,    -1,    -1,    89,    90,    -1,    92,    93,
03647       -1,    -1,    -1,    97,    98,    99,   100,   101,   102,   103,
03648       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03649       -1,     3,     4,     5,    -1,     7,    -1,    -1,   122,    11,
03650       12,    -1,    -1,    -1,    16,    -1,    18,    19,    20,    21,
03651       22,    23,    24,    -1,    -1,    -1,   140,    -1,    30,    31,
03652       32,    33,    34,    35,    36,    -1,    -1,    39,    -1,    -1,
03653       -1,    -1,    -1,    -1,    46,    -1,    -1,    49,    50,    51,
03654       52,    53,    54,    55,    56,    57,    -1,    59,    60,    -1,
03655       62,    63,    64,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03656       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03657       -1,    -1,    -1,    -1,    86,    -1,    -1,    89,    90,    -1,
03658       92,    93,    -1,    -1,    -1,    97,    98,    99,   100,   101,
03659      102,   103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03660       -1,    -1,    -1,     3,     4,     5,     6,     7,    -1,    -1,
03661      122,    11,    12,    -1,    -1,    -1,    16,    -1,    18,    19,
03662       20,    21,    22,    23,    24,    -1,    -1,    -1,   140,    -1,
03663       30,    31,    32,    33,    34,    35,    36,    -1,    -1,    39,
03664       -1,    -1,    -1,    -1,    -1,    45,    46,    47,    48,    49,
03665       50,    51,    52,    53,    54,    55,    56,    57,    -1,    59,
03666       60,    -1,    62,    63,    64,    -1,    66,    67,    -1,    -1,
03667       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03668       -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,    89,
03669       90,    -1,    92,    93,    -1,    95,    -1,    97,    98,    99,
03670      100,   101,   102,   103,    -1,    -1,    -1,    -1,    -1,    -1,
03671       -1,    -1,     3,     4,     5,     6,     7,    -1,    -1,    -1,
03672       11,    12,   122,   123,   124,    16,    -1,    18,    19,    20,
03673       21,    22,    23,    24,    -1,    -1,    -1,    -1,    -1,    30,
03674       31,    32,    33,    34,    35,    36,    -1,    -1,    39,    -1,
03675       -1,    -1,    -1,    -1,    45,    46,    -1,    48,    49,    50,
03676       51,    52,    53,    54,    55,    56,    57,    -1,    59,    60,
03677       -1,    62,    63,    64,    -1,    66,    67,    -1,    -1,    -1,
03678       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03679       -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,    89,    90,
03680       -1,    92,    93,    -1,    95,    -1,    97,    98,    99,   100,
03681      101,   102,   103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03682       -1,     3,     4,     5,    -1,     7,    -1,    -1,    -1,    11,
03683       12,   122,   123,   124,    16,    -1,    18,    19,    20,    21,
03684       22,    23,    24,    -1,    -1,    -1,    -1,    -1,    30,    31,
03685       32,    33,    34,    35,    36,    -1,    -1,    39,    -1,    -1,
03686       -1,    -1,    -1,    -1,    46,    -1,    -1,    49,    50,    51,
03687       52,    53,    54,    55,    56,    57,    58,    59,    60,    -1,
03688       62,    63,    64,    -1,    66,    67,    -1,    -1,    -1,    -1,
03689       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03690       -1,    -1,    -1,    -1,    86,    -1,    -1,    89,    90,    -1,
03691       92,    93,    -1,    95,    96,    97,    98,    99,   100,   101,
03692      102,   103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03693        3,     4,     5,    -1,     7,    -1,    -1,    -1,    11,    12,
03694      122,   123,   124,    16,    -1,    18,    19,    20,    21,    22,
03695       23,    24,    -1,    -1,    -1,    -1,    -1,    30,    31,    32,
03696       33,    34,    35,    36,    -1,    -1,    39,    -1,    -1,    -1,
03697       -1,    -1,    -1,    46,    -1,    -1,    49,    50,    51,    52,
03698       53,    54,    55,    56,    57,    58,    59,    60,    -1,    62,
03699       63,    64,    -1,    66,    67,    -1,    -1,    -1,    -1,    -1,
03700       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03701       -1,    -1,    -1,    86,    -1,    -1,    89,    90,    -1,    92,
03702       93,    -1,    95,    96,    97,    98,    99,   100,   101,   102,
03703      103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,
03704        4,     5,    -1,     7,    -1,    -1,    -1,    11,    12,   122,
03705      123,   124,    16,    -1,    18,    19,    20,    21,    22,    23,
03706       24,    -1,    -1,    -1,    -1,    -1,    30,    31,    32,    33,
03707       34,    35,    36,    -1,    -1,    39,    -1,    -1,    -1,    -1,
03708       -1,    -1,    46,    -1,    -1,    49,    50,    51,    52,    53,
03709       54,    55,    56,    57,    58,    59,    60,    -1,    62,    63,
03710       64,    -1,    66,    67,    -1,    -1,    -1,    -1,    -1,    -1,
03711       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03712       -1,    -1,    86,    -1,    -1,    89,    90,    -1,    92,    93,
03713       -1,    95,    -1,    97,    98,    99,   100,   101,   102,   103,
03714       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,
03715        5,    -1,     7,    -1,    -1,    -1,    11,    12,   122,   123,
03716      124,    16,    -1,    18,    19,    20,    21,    22,    23,    24,
03717       -1,    -1,    -1,    -1,    -1,    30,    31,    32,    33,    34,
03718       35,    36,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,
03719       -1,    46,    -1,    -1,    49,    50,    51,    52,    53,    54,
03720       55,    56,    57,    58,    59,    60,    -1,    62,    63,    64,
03721       -1,    66,    67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03722       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03723       -1,    86,    -1,    -1,    89,    90,    -1,    92,    93,    -1,
03724       -1,    96,    97,    98,    99,   100,   101,   102,   103,    -1,
03725       -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,
03726       -1,     7,    -1,    -1,    -1,    11,    12,   122,   123,   124,
03727       16,    -1,    18,    19,    20,    21,    22,    23,    24,    -1,
03728       -1,    -1,    -1,    -1,    30,    31,    32,    33,    34,    35,
03729       36,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,
03730       46,    -1,    -1,    49,    50,    51,    52,    53,    54,    55,
03731       56,    57,    58,    59,    60,    -1,    62,    63,    64,    -1,
03732       66,    67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03733       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03734       86,    -1,    -1,    89,    90,    -1,    92,    93,    -1,    95,
03735       -1,    97,    98,    99,   100,   101,   102,   103,    -1,    -1,
03736       -1,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,    -1,
03737        7,    -1,    -1,    -1,    11,    12,   122,   123,   124,    16,
03738       -1,    18,    19,    20,    21,    22,    23,    24,    -1,    -1,
03739       -1,    -1,    -1,    30,    31,    32,    33,    34,    35,    36,
03740       -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,    46,
03741       -1,    -1,    49,    50,    51,    52,    53,    54,    55,    56,
03742       57,    58,    59,    60,    -1,    62,    63,    64,    -1,    66,
03743       67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03744       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,
03745       -1,    -1,    89,    90,    -1,    92,    93,    -1,    -1,    -1,
03746       97,    98,    99,   100,   101,   102,   103,    -1,    -1,    -1,
03747       -1,    -1,    -1,    -1,    -1,     3,     4,     5,    -1,     7,
03748       -1,    -1,    -1,    11,    12,   122,   123,   124,    16,    -1,
03749       18,    19,    20,    21,    22,    23,    24,    -1,    -1,    -1,
03750       -1,    -1,    30,    31,    32,    33,    34,    35,    36,    -1,
03751       -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,    46,    -1,
03752       -1,    49,    50,    51,    52,    53,    54,    55,    56,    57,
03753       -1,    59,    60,    -1,    62,    63,    64,    -1,    66,    67,
03754       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03755       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,
03756       -1,    89,    90,    -1,    92,    93,    -1,    95,    -1,    97,
03757       98,    99,   100,   101,   102,   103,    -1,    -1,    -1,    -1,
03758       -1,    -1,    -1,    -1,     3,     4,     5,    -1,     7,    -1,
03759       -1,    -1,    11,    12,   122,   123,   124,    16,    -1,    18,
03760       19,    20,    21,    22,    23,    24,    -1,    -1,    -1,    -1,
03761       -1,    30,    31,    32,    33,    34,    35,    36,    -1,    -1,
03762       39,    -1,    -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,
03763       49,    50,    51,    52,    53,    54,    55,    56,    57,    -1,
03764       59,    60,    -1,    62,    63,    64,    -1,    66,    67,    -1,
03765       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03766       -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,
03767       89,    90,    -1,    92,    93,    -1,    95,    -1,    97,    98,
03768       99,   100,   101,   102,   103,    -1,    -1,    -1,    -1,    -1,
03769       -1,    -1,    -1,     3,     4,     5,    -1,     7,    -1,    -1,
03770       -1,    11,    12,   122,   123,   124,    16,    -1,    18,    19,
03771       20,    21,    22,    23,    24,    -1,    -1,    -1,    -1,    -1,
03772       30,    31,    32,    33,    34,    35,    36,    -1,    -1,    39,
03773       -1,    -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,    49,
03774       50,    51,    52,    53,    54,    55,    56,    57,    -1,    59,
03775       60,    -1,    62,    63,    64,    -1,    66,    67,    -1,    -1,
03776       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03777       -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,    89,
03778       90,    -1,    92,    93,    -1,    95,    -1,    97,    98,    99,
03779      100,   101,   102,   103,    -1,    -1,    -1,    -1,    -1,    -1,
03780       -1,    -1,     3,     4,     5,    -1,     7,    -1,    -1,    -1,
03781       11,    12,   122,   123,   124,    16,    -1,    18,    19,    20,
03782       21,    22,    23,    24,    -1,    -1,    -1,    -1,    -1,    30,
03783       31,    32,    33,    34,    35,    36,    -1,    -1,    39,    -1,
03784       -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,    49,    50,
03785       51,    52,    53,    54,    55,    56,    57,    -1,    59,    60,
03786       -1,    62,    63,    64,    -1,    66,    67,    -1,    -1,    -1,
03787       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03788       -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,    89,    90,
03789       -1,    92,    93,    -1,    95,    -1,    97,    98,    99,   100,
03790      101,   102,   103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03791       -1,     3,     4,     5,    -1,     7,    -1,    -1,    -1,    11,
03792       12,   122,   123,   124,    16,    -1,    18,    19,    20,    21,
03793       22,    23,    24,    -1,    -1,    -1,    -1,    -1,    30,    31,
03794       32,    33,    34,    35,    36,    -1,    -1,    39,    -1,    -1,
03795       -1,    -1,    -1,    -1,    46,    -1,    -1,    49,    50,    51,
03796       52,    53,    54,    55,    56,    57,    -1,    59,    60,    -1,
03797       62,    63,    64,    -1,    66,    67,    -1,    -1,    -1,    -1,
03798       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03799       -1,    -1,    -1,    -1,    86,    -1,    -1,    89,    90,    -1,
03800       92,    93,    -1,    95,    -1,    97,    98,    99,   100,   101,
03801      102,   103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03802        3,     4,     5,    -1,     7,    -1,    -1,    -1,    11,    12,
03803      122,   123,   124,    16,    -1,    18,    19,    20,    21,    22,
03804       23,    24,    -1,    -1,    -1,    -1,    -1,    30,    31,    32,
03805       33,    34,    35,    36,    -1,    -1,    39,    -1,    -1,    -1,
03806       -1,    -1,    -1,    46,    -1,    -1,    49,    50,    51,    52,
03807       53,    54,    55,    56,    57,    -1,    59,    60,    -1,    62,
03808       63,    64,    -1,    66,    67,    -1,    -1,    -1,    -1,    -1,
03809       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03810       -1,    -1,    -1,    86,    -1,    -1,    89,    90,    -1,    92,
03811       93,    -1,    -1,    -1,    97,    98,    99,   100,   101,   102,
03812      103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,
03813        4,     5,    -1,     7,    -1,    -1,    -1,    11,    12,   122,
03814      123,   124,    16,    -1,    18,    19,    20,    21,    22,    23,
03815       24,    -1,    -1,    -1,    -1,    -1,    30,    31,    32,    33,
03816       34,    35,    36,    -1,    -1,    39,    -1,    -1,    -1,    -1,
03817       -1,    -1,    46,    -1,    -1,    49,    50,    51,    52,    53,
03818       54,    55,    56,    57,    -1,    59,    60,    -1,    62,    63,
03819       64,    -1,    66,    67,    -1,    -1,    -1,    -1,    -1,    -1,
03820       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03821       -1,    -1,    86,    -1,    -1,    89,    90,    -1,    92,    93,
03822       -1,    -1,    -1,    97,    98,    99,   100,   101,   102,   103,
03823       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,
03824        5,    -1,     7,    -1,    -1,    -1,    11,    12,   122,   123,
03825      124,    16,    -1,    18,    19,    20,    21,    22,    23,    24,
03826       -1,    -1,    -1,    -1,    -1,    30,    31,    32,    33,    34,
03827       35,    36,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,
03828       -1,    46,    -1,    -1,    49,    50,    51,    52,    53,    54,
03829       55,    56,    57,    -1,    59,    60,    -1,    62,    63,    64,
03830       -1,    66,    67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03831       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03832       -1,    86,    -1,    -1,    89,    90,    -1,    92,    93,    -1,
03833       -1,    -1,    97,    98,    99,   100,   101,   102,   103,    -1,
03834       -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,
03835       -1,     7,    -1,    -1,    -1,    11,    12,   122,   123,   124,
03836       16,    -1,    18,    19,    20,    21,    22,    23,    24,    -1,
03837       -1,    -1,    -1,    -1,    30,    31,    32,    33,    34,    35,
03838       36,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,
03839       46,    -1,    -1,    49,    50,    51,    52,    53,    54,    55,
03840       56,    57,    -1,    59,    60,    -1,    62,    63,    64,    -1,
03841       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03842       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03843       86,    -1,    -1,    89,    90,    -1,    92,    93,    -1,    95,
03844       -1,    97,    98,    99,   100,   101,   102,   103,    -1,    -1,
03845       -1,    -1,     3,     4,     5,    -1,     7,    -1,    -1,    -1,
03846       11,    12,    -1,    -1,    -1,    16,   122,    18,    19,    20,
03847       21,    22,    23,    24,    -1,    -1,    -1,    -1,    -1,    30,
03848       31,    32,    33,    34,    35,    36,    -1,    -1,    39,    -1,
03849       -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,    49,    50,
03850       51,    52,    53,    54,    55,    56,    57,    -1,    59,    60,
03851       -1,    62,    63,    64,    -1,    -1,    -1,    -1,    -1,    -1,
03852       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03853       -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,    89,    90,
03854       -1,    92,    93,    -1,    95,    -1,    97,    98,    99,   100,
03855      101,   102,   103,    -1,    -1,    -1,    -1,     3,     4,     5,
03856       -1,     7,    -1,    -1,    -1,    11,    12,    -1,    -1,    -1,
03857       16,   122,    18,    19,    20,    21,    22,    23,    24,    -1,
03858       -1,    -1,    -1,    -1,    30,    31,    32,    33,    34,    35,
03859       36,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,
03860       46,    -1,    -1,    49,    50,    51,    52,    53,    54,    55,
03861       56,    57,    -1,    59,    60,    -1,    62,    63,    64,    -1,
03862       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03863       -1,    -1,    -1,    -1,    -1,    -1,    -1,    83,    -1,    -1,
03864       86,    -1,    -1,    89,    90,    -1,    92,    93,    -1,    -1,
03865       -1,    97,    98,    99,   100,   101,   102,   103,    -1,    -1,
03866       -1,    -1,     3,     4,     5,    -1,     7,    -1,    -1,    -1,
03867       11,    12,    -1,    -1,    -1,    16,   122,    18,    19,    20,
03868       21,    22,    23,    24,    -1,    -1,    -1,    -1,    -1,    30,
03869       31,    32,    33,    34,    35,    36,    -1,    -1,    39,    -1,
03870       -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,    49,    50,
03871       51,    52,    53,    54,    55,    56,    57,    -1,    59,    60,
03872       -1,    62,    63,    64,    -1,    -1,    -1,    -1,    -1,    -1,
03873       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03874       -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,    89,    90,
03875       -1,    92,    93,    -1,    -1,    -1,    97,    98,    99,   100,
03876      101,   102,   103,    -1,    -1,    -1,    -1,     3,     4,     5,
03877       -1,     7,    -1,    -1,    -1,    11,    12,    -1,    -1,    -1,
03878       16,   122,    18,    19,    20,    21,    22,    23,    24,    -1,
03879       -1,    -1,    -1,    -1,    30,    31,    32,    33,    34,    35,
03880       36,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,
03881       46,    -1,    -1,    49,    50,    51,    52,    53,    54,    55,
03882       56,    57,    -1,    59,    60,    -1,    62,    63,    64,    -1,
03883       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03884       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03885       86,    -1,    -1,    89,    90,    -1,    92,    93,    -1,    -1,
03886       -1,    97,    98,    99,   100,   101,   102,   103,    -1,    -1,
03887       -1,    -1,     3,     4,     5,    -1,     7,    -1,    -1,    -1,
03888       11,    12,    -1,    -1,    -1,    16,   122,    18,    19,    20,
03889       21,    22,    23,    24,    -1,    -1,    -1,    -1,    -1,    30,
03890       31,    32,    33,    34,    35,    36,    -1,    -1,    39,    -1,
03891       -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,    49,    50,
03892       51,    52,    53,    54,    55,    56,    57,    -1,    59,    60,
03893       -1,    62,    63,    64,    -1,    -1,    -1,    -1,    -1,    -1,
03894       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03895       -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,    89,    90,
03896       -1,    92,    93,    -1,    -1,    -1,    97,    98,    99,   100,
03897      101,   102,   103,    -1,    -1,    -1,    -1,     3,     4,     5,
03898       -1,     7,    -1,    -1,    -1,    11,    12,    -1,    -1,    -1,
03899       16,   122,    18,    19,    20,    21,    22,    23,    24,    -1,
03900       -1,    -1,    -1,    -1,    30,    31,    32,    33,    34,    35,
03901       36,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,
03902       46,    -1,    -1,    49,    50,    51,    52,    53,    54,    55,
03903       56,    57,    -1,    59,    60,    -1,    62,    63,    64,    -1,
03904       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03905       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03906       86,    -1,    -1,    89,    90,    -1,    92,    93,    -1,    -1,
03907       -1,    97,    98,    99,   100,   101,   102,   103,    -1,    -1,
03908       -1,    -1,    -1,    52,    53,    -1,    -1,    56,    -1,    -1,
03909       -1,    -1,    -1,    -1,    -1,    -1,   122,    66,    67,    68,
03910       69,    70,    71,    72,    73,    74,    -1,    -1,    77,    78,
03911       -1,    -1,    81,    82,    83,    84,    -1,    -1,    -1,    -1,
03912       -1,    -1,    -1,    -1,    -1,    -1,    95,    -1,    -1,    -1,
03913       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03914       -1,    -1,    -1,   112,   113,   114,   115,   116,   117,   118,
03915      119,   120,   121,    -1,   123,   124,    -1,    -1,    -1,    -1,
03916       52,    53,    -1,    -1,    56,    -1,    -1,    -1,    -1,    -1,
03917       -1,    -1,   141,   142,    66,    67,    68,    69,    70,    71,
03918       72,    73,    74,    -1,    -1,    77,    78,    -1,    -1,    81,
03919       82,    83,    84,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03920       -1,    -1,    -1,    95,    -1,    -1,    -1,    -1,    -1,    -1,
03921       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03922      112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
03923       -1,   123,   124,    -1,    -1,    -1,    -1,    52,    53,    -1,
03924       -1,    56,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   141,
03925      142,    66,    67,    68,    69,    70,    71,    72,    73,    74,
03926       -1,    -1,    77,    78,    -1,    -1,    81,    82,    83,    84,
03927       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03928       95,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03929       -1,    -1,    -1,    -1,    -1,    -1,    -1,   112,   113,   114,
03930      115,   116,   117,   118,   119,   120,   121,    -1,   123,   124,
03931       -1,    -1,    -1,    -1,    52,    53,    -1,    -1,    56,    -1,
03932       -1,    -1,    -1,    -1,    -1,    -1,   141,   142,    66,    67,
03933       68,    69,    70,    71,    72,    73,    74,    -1,    -1,    77,
03934       78,    -1,    -1,    81,    82,    83,    84,    -1,    -1,    -1,
03935       -1,    -1,    -1,    -1,    -1,    -1,    -1,    95,    -1,    -1,
03936       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03937       -1,    -1,    -1,    -1,   112,   113,   114,   115,   116,   117,
03938      118,   119,   120,   121,    -1,   123,   124,    -1,    -1,    -1,
03939       -1,    52,    53,    -1,    -1,    56,    -1,    -1,    -1,    -1,
03940       -1,    -1,    -1,   141,   142,    66,    67,    68,    69,    70,
03941       71,    72,    73,    74,    -1,    -1,    77,    78,    -1,    -1,
03942       81,    82,    83,    84,    -1,    -1,    -1,    -1,    -1,    -1,
03943       -1,    -1,    -1,    -1,    95,    -1,    -1,    -1,    -1,    -1,
03944       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03945       -1,   112,   113,   114,   115,   116,   117,   118,   119,   120,
03946      121,    -1,   123,   124,    -1,    -1,    -1,    -1,    52,    53,
03947       -1,    -1,    56,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03948      141,   142,    66,    67,    68,    69,    70,    71,    72,    73,
03949       74,    -1,    -1,    77,    78,    -1,    -1,    81,    82,    83,
03950       84,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03951       -1,    95,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03952       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   112,   113,
03953      114,   115,   116,   117,   118,   119,   120,   121,    -1,   123,
03954      124,    -1,    -1,    -1,    -1,    52,    53,    -1,    -1,    56,
03955       -1,    -1,    -1,    -1,    -1,    -1,    -1,   141,   142,    66,
03956       67,    68,    69,    70,    71,    72,    73,    74,    -1,    -1,
03957       77,    78,    -1,    -1,    81,    82,    83,    84,    -1,    -1,
03958       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    95,    -1,
03959       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03960       -1,    -1,    -1,    -1,    -1,   112,   113,   114,   115,   116,
03961      117,   118,   119,   120,   121,    -1,   123,   124,    -1,    -1,
03962       -1,    -1,    52,    53,    -1,    -1,    56,    -1,    -1,    -1,
03963       -1,    -1,    -1,    -1,   141,   142,    66,    67,    68,    69,
03964       70,    71,    72,    73,    74,    -1,    -1,    77,    78,    -1,
03965       -1,    81,    82,    83,    84,    -1,    -1,    -1,    -1,    -1,
03966       -1,    -1,    -1,    -1,    -1,    95,    -1,    -1,    -1,    -1,
03967       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03968       -1,    -1,   112,   113,   114,   115,   116,   117,   118,   119,
03969      120,   121,    -1,   123,   124,    -1,    -1,    -1,    -1,    52,
03970       53,    -1,    -1,    56,    -1,    -1,    -1,    -1,    -1,    -1,
03971       -1,   141,   142,    66,    67,    68,    69,    70,    71,    72,
03972       73,    74,    -1,    -1,    77,    78,    -1,    -1,    81,    82,
03973       83,    84,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03974       -1,    -1,    95,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03975       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   112,
03976      113,   114,   115,   116,   117,   118,   119,   120,   121,    -1,
03977      123,   124,    -1,    -1,    -1,    -1,    52,    53,    -1,    -1,
03978       56,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   141,   142,
03979       66,    67,    68,    69,    70,    71,    72,    73,    74,    -1,
03980       -1,    77,    78,    -1,    -1,    81,    82,    83,    84,    -1,
03981       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    95,
03982       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03983       -1,    -1,    -1,    -1,    -1,    -1,   112,   113,   114,   115,
03984      116,   117,   118,   119,   120,   121,    -1,   123,   124,    -1,
03985       -1,    -1,    -1,    52,    53,    -1,    -1,    56,    -1,    -1,
03986       -1,    -1,    -1,    -1,    -1,   141,   142,    66,    67,    68,
03987       69,    70,    71,    72,    73,    74,    -1,    -1,    77,    78,
03988       -1,    -1,    81,    82,    83,    84,    -1,    -1,    -1,    -1,
03989       -1,    -1,    -1,    -1,    -1,    -1,    95,    -1,    -1,    -1,
03990       -1,    -1,    -1,    -1,    44,    -1,    -1,    -1,    -1,    -1,
03991       -1,    -1,    -1,   112,   113,   114,   115,   116,   117,   118,
03992      119,   120,   121,    44,   123,   124,    -1,    -1,    68,    69,
03993       70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
03994       80,    -1,   141,    83,    84,    -1,    -1,    68,    69,    70,
03995       71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
03996       -1,    -1,    83,    84,    -1,    -1,    -1,    -1,    -1,    -1,
03997      110,    -1,   112,   113,   114,   115,   116,   117,   118,   119,
03998      120,   121,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   110,
03999       -1,   112,   113,   114,   115,   116,   117,   118,   119,   120,
04000      121
04001 };
04002 
04003 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
04004    symbol of state STATE-NUM.  */
04005 static const yytype_uint16 yystos[] =
04006 {
04007        0,   149,   150,     0,     1,     3,     4,     5,     6,     7,
04008       11,    12,    16,    18,    19,    20,    21,    22,    23,    24,
04009       30,    31,    32,    33,    34,    35,    36,    39,    45,    46,
04010       47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
04011       57,    59,    60,    62,    63,    64,    66,    67,    86,    89,
04012       90,    92,    93,    95,    97,    98,    99,   100,   101,   102,
04013      103,   122,   123,   124,   151,   152,   153,   158,   160,   162,
04014      163,   166,   167,   169,   170,   171,   173,   174,   184,   198,
04015      215,   216,   217,   218,   219,   220,   221,   222,   223,   224,
04016      225,   248,   249,   259,   260,   261,   262,   263,   264,   265,
04017      268,   278,   280,   281,   282,   283,   284,   285,   308,   319,
04018      153,     3,     4,     5,     6,     7,     8,     9,    10,    11,
04019       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
04020       22,    23,    24,    25,    26,    30,    31,    32,    33,    34,
04021       35,    36,    37,    38,    39,    45,    46,    47,    48,    49,
04022       50,    51,    52,    53,    56,    66,    67,    68,    69,    70,
04023       71,    72,    73,    74,    77,    78,    81,    82,    83,    84,
04024       95,   112,   113,   114,   115,   116,   117,   118,   119,   120,
04025      121,   123,   124,   141,   177,   178,   179,   180,   182,   183,
04026      278,   280,    39,    58,    86,    89,    95,    96,   123,   166,
04027      174,   184,   186,   191,   194,   196,   215,   282,   284,   285,
04028      306,   307,   191,   191,   142,   192,   193,   142,   188,   192,
04029      142,   147,   313,    54,   179,   313,   154,   136,    21,    22,
04030       30,    31,    32,   184,   215,   308,   184,    56,     1,    89,
04031      156,   157,   158,   168,   169,   319,   160,   187,   196,   306,
04032      319,   186,   305,   306,   319,    46,    86,   122,   140,   173,
04033      198,   215,   282,   285,   241,   242,    54,    55,    57,   177,
04034      271,   279,   270,   271,   272,   146,   266,   146,   269,    59,
04035       60,   162,   184,   184,   145,   147,   312,   317,   318,    40,
04036       41,    42,    43,    44,    37,    38,    28,   246,   109,   140,
04037       89,    95,   170,   109,    68,    69,    70,    71,    72,    73,
04038       74,    75,    76,    77,    78,    79,    80,    83,    84,   110,
04039      112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
04040       85,   138,   139,   199,   160,   161,   161,   202,   204,   161,
04041      312,   318,    86,   167,   174,   215,   231,   282,   285,    52,
04042       56,    83,    86,   175,   176,   215,   282,   285,   176,    33,
04043       34,    35,    36,    49,    50,    51,    52,    56,   142,   177,
04044      283,   303,    85,   139,    26,   136,   250,   262,    87,    87,
04045      188,   192,   250,   140,   186,    56,   186,   186,   109,    88,
04046      140,   195,   319,    85,   138,   139,    87,    87,   140,   195,
04047      191,   313,   314,   191,   190,   191,   319,   160,   314,   160,
04048       54,    63,    64,   159,   142,   185,   136,   156,    85,   139,
04049       87,   158,   168,   143,   312,   318,   314,   200,   144,   140,
04050      147,   316,   140,   316,   137,   316,   313,    56,    59,    60,
04051      170,   172,   140,    85,   138,   139,   243,    61,   104,   105,
04052      106,   273,   106,   273,   106,    65,   273,   106,   106,   267,
04053      273,   106,    61,   106,    68,    68,   145,   153,   161,   161,
04054      161,   161,   158,   160,   160,   247,    95,   162,   186,   196,
04055      197,   168,   140,   173,   140,   162,   184,   186,   197,   184,
04056      184,   184,   184,   184,   184,   184,   184,   184,   184,   184,
04057      184,   184,   184,   184,   184,   184,   184,   184,   184,   184,
04058      184,   184,   184,   184,   184,    52,    53,    56,   182,   188,
04059      309,   310,   190,    52,    53,    56,   182,   188,   309,   155,
04060      156,    13,   227,   317,   227,   161,   161,   312,    17,   253,
04061       56,    85,   138,   139,    25,   160,    52,    56,   175,     1,
04062      113,   286,   317,    85,   138,   139,   211,   304,   212,    85,
04063      139,   311,    52,    56,   309,   309,   252,   251,   162,   184,
04064      162,   184,    94,   164,   181,   184,   186,    95,   186,   194,
04065      306,    52,    56,   190,    52,    56,   307,   314,   143,   314,
04066      314,   179,   201,   184,   151,   137,   309,   309,   184,   314,
04067      158,   314,   306,   140,   172,    52,    56,   190,    52,    56,
04068       52,    54,    55,    56,    57,    89,    95,    96,   116,   119,
04069      142,   244,   289,   290,   291,   292,   293,   294,   297,   298,
04070      299,   300,   301,   275,   274,   146,   273,   146,   184,   184,
04071       76,   114,   236,   237,   319,   186,   140,   314,   172,   140,
04072       44,   313,    87,    87,   188,   192,   313,   315,    87,    87,
04073      188,   189,   192,   319,    10,   226,     8,   255,   319,   156,
04074       13,   156,    27,   228,   317,   228,   253,   196,   226,    52,
04075       56,   190,    52,    56,   206,   209,   317,   287,   208,    52,
04076       56,   175,   190,   155,   160,   142,   288,   289,   213,   189,
04077      192,   189,   192,   236,   236,    44,   165,   179,   186,   195,
04078       87,    87,   315,    87,    87,   160,   137,   316,   170,   315,
04079      109,    52,    89,    95,   232,   233,   234,   291,   289,    29,
04080      107,   245,   140,   302,   319,   140,   302,    52,   140,   302,
04081       52,   276,    54,    55,    57,   277,   285,    52,   145,   235,
04082      238,   293,   295,   296,   299,   301,   319,   156,    95,   186,
04083      172,   184,   111,   162,   184,   162,   184,   164,   144,    87,
04084      162,   184,   162,   184,   164,   186,   197,   256,   319,    15,
04085      230,   319,    14,   229,   230,   230,   203,   205,   226,   140,
04086      227,   315,   161,   317,   161,   155,   315,   226,   314,   289,
04087      155,   317,   177,   156,   156,   184,   236,    87,   314,   186,
04088      234,   140,   291,   140,   314,   238,   156,   156,   292,   297,
04089      299,   301,   293,   294,   299,   293,   156,   109,    52,   239,
04090      240,   290,   238,   114,   140,   302,   140,   302,   140,   302,
04091       10,   186,   184,   162,   184,    88,   257,   319,   156,     9,
04092      258,   319,   161,   226,   226,   156,   156,   186,   156,   228,
04093      210,   317,   226,   314,   226,   214,    10,   137,   156,   314,
04094      233,   140,    95,   232,   314,    10,   137,   140,   302,   140,
04095      302,   140,   302,   140,   302,   302,   137,    86,   215,   140,
04096      114,   296,   299,   293,   295,   299,   293,    86,   174,   215,
04097      282,   285,   227,   156,   227,   226,   226,   230,   253,   254,
04098      207,   155,   288,   137,   140,   233,   140,   291,   293,   299,
04099      293,   293,    56,    85,   240,   140,   302,   140,   302,   302,
04100      140,   302,   302,    56,    85,   138,   139,   156,   156,   156,
04101      226,   155,   233,   140,   302,   140,   302,   302,   302,    52,
04102       56,   293,   299,   293,   293,    52,    56,   190,    52,    56,
04103      255,   229,   226,   226,   233,   293,   302,   140,   302,   302,
04104      302,   315,   302,   293,   302
04105 };
04106 
04107 #define yyerrok         (yyerrstatus = 0)
04108 #define yyclearin       (yychar = YYEMPTY)
04109 #define YYEMPTY         (-2)
04110 #define YYEOF           0
04111 
04112 #define YYACCEPT        goto yyacceptlab
04113 #define YYABORT         goto yyabortlab
04114 #define YYERROR         goto yyerrorlab
04115 
04116 
04117 /* Like YYERROR except do call yyerror.  This remains here temporarily
04118    to ease the transition to the new meaning of YYERROR, for GCC.
04119    Once GCC version 2 has supplanted version 1, this can go.  However,
04120    YYFAIL appears to be in use.  Nevertheless, it is formally deprecated
04121    in Bison 2.4.2's NEWS entry, where a plan to phase it out is
04122    discussed.  */
04123 
04124 #define YYFAIL          goto yyerrlab
04125 #if defined YYFAIL
04126   /* This is here to suppress warnings from the GCC cpp's
04127      -Wunused-macros.  Normally we don't worry about that warning, but
04128      some users do, and we want to make it easy for users to remove
04129      YYFAIL uses, which will produce warnings from Bison 2.5.  */
04130 #endif
04131 
04132 #define YYRECOVERING()  (!!yyerrstatus)
04133 
04134 #define YYBACKUP(Token, Value)                                  \
04135 do                                                              \
04136   if (yychar == YYEMPTY && yylen == 1)                          \
04137     {                                                           \
04138       yychar = (Token);                                         \
04139       yylval = (Value);                                         \
04140       yytoken = YYTRANSLATE (yychar);                           \
04141       YYPOPSTACK (1);                                           \
04142       goto yybackup;                                            \
04143     }                                                           \
04144   else                                                          \
04145     {                                                           \
04146       parser_yyerror (parser, YY_("syntax error: cannot back up")); \
04147       YYERROR;                                                  \
04148     }                                                           \
04149 while (YYID (0))
04150 
04151 
04152 #define YYTERROR        1
04153 #define YYERRCODE       256
04154 
04155 
04156 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
04157    If N is 0, then set CURRENT to the empty location which ends
04158    the previous symbol: RHS[0] (always defined).  */
04159 
04160 #define YYRHSLOC(Rhs, K) ((Rhs)[K])
04161 #ifndef YYLLOC_DEFAULT
04162 # define YYLLOC_DEFAULT(Current, Rhs, N)                                \
04163     do                                                                  \
04164       if (YYID (N))                                                    \
04165         {                                                               \
04166           (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;        \
04167           (Current).first_column = YYRHSLOC (Rhs, 1).first_column;      \
04168           (Current).last_line    = YYRHSLOC (Rhs, N).last_line;         \
04169           (Current).last_column  = YYRHSLOC (Rhs, N).last_column;       \
04170         }                                                               \
04171       else                                                              \
04172         {                                                               \
04173           (Current).first_line   = (Current).last_line   =              \
04174             YYRHSLOC (Rhs, 0).last_line;                                \
04175           (Current).first_column = (Current).last_column =              \
04176             YYRHSLOC (Rhs, 0).last_column;                              \
04177         }                                                               \
04178     while (YYID (0))
04179 #endif
04180 
04181 
04182 /* YY_LOCATION_PRINT -- Print the location on the stream.
04183    This macro was not mandated originally: define only if we know
04184    we won't break user code: when these are the locations we know.  */
04185 
04186 #ifndef YY_LOCATION_PRINT
04187 # if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL
04188 #  define YY_LOCATION_PRINT(File, Loc)                  \
04189      fprintf (File, "%d.%d-%d.%d",                      \
04190               (Loc).first_line, (Loc).first_column,     \
04191               (Loc).last_line,  (Loc).last_column)
04192 # else
04193 #  define YY_LOCATION_PRINT(File, Loc) ((void) 0)
04194 # endif
04195 #endif
04196 
04197 
04198 /* YYLEX -- calling `yylex' with the right arguments.  */
04199 
04200 #ifdef YYLEX_PARAM
04201 # define YYLEX yylex (&yylval, YYLEX_PARAM)
04202 #else
04203 # define YYLEX yylex (&yylval)
04204 #endif
04205 
04206 /* Enable debugging if requested.  */
04207 #if YYDEBUG
04208 
04209 # ifndef YYFPRINTF
04210 #  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
04211 #  define YYFPRINTF fprintf
04212 # endif
04213 
04214 # define YYDPRINTF(Args)                        \
04215 do {                                            \
04216   if (yydebug)                                  \
04217     YYFPRINTF Args;                             \
04218 } while (YYID (0))
04219 
04220 # define YY_SYMBOL_PRINT(Title, Type, Value, Location)                    \
04221 do {                                                                      \
04222   if (yydebug)                                                            \
04223     {                                                                     \
04224       YYFPRINTF (stderr, "%s ", Title);                                   \
04225       yy_symbol_print (stderr,                                            \
04226                   Type, Value, parser); \
04227       YYFPRINTF (stderr, "\n");                                           \
04228     }                                                                     \
04229 } while (YYID (0))
04230 
04231 
04232 /*--------------------------------.
04233 | Print this symbol on YYOUTPUT.  |
04234 `--------------------------------*/
04235 
04236 /*ARGSUSED*/
04237 #if (defined __STDC__ || defined __C99__FUNC__ \
04238      || defined __cplusplus || defined _MSC_VER)
04239 static void
04240 yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, struct parser_params *parser)
04241 #else
04242 static void
04243 yy_symbol_value_print (yyoutput, yytype, yyvaluep, parser)
04244     FILE *yyoutput;
04245     int yytype;
04246     YYSTYPE const * const yyvaluep;
04247     struct parser_params *parser;
04248 #endif
04249 {
04250   if (!yyvaluep)
04251     return;
04252   YYUSE (parser);
04253 # ifdef YYPRINT
04254   if (yytype < YYNTOKENS)
04255     YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
04256 # else
04257   YYUSE (yyoutput);
04258 # endif
04259   switch (yytype)
04260     {
04261       default:
04262         break;
04263     }
04264 }
04265 
04266 
04267 /*--------------------------------.
04268 | Print this symbol on YYOUTPUT.  |
04269 `--------------------------------*/
04270 
04271 #if (defined __STDC__ || defined __C99__FUNC__ \
04272      || defined __cplusplus || defined _MSC_VER)
04273 static void
04274 yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, struct parser_params *parser)
04275 #else
04276 static void
04277 yy_symbol_print (yyoutput, yytype, yyvaluep, parser)
04278     FILE *yyoutput;
04279     int yytype;
04280     YYSTYPE const * const yyvaluep;
04281     struct parser_params *parser;
04282 #endif
04283 {
04284   if (yytype < YYNTOKENS)
04285     YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
04286   else
04287     YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
04288 
04289   yy_symbol_value_print (yyoutput, yytype, yyvaluep, parser);
04290   YYFPRINTF (yyoutput, ")");
04291 }
04292 
04293 /*------------------------------------------------------------------.
04294 | yy_stack_print -- Print the state stack from its BOTTOM up to its |
04295 | TOP (included).                                                   |
04296 `------------------------------------------------------------------*/
04297 
04298 #if (defined __STDC__ || defined __C99__FUNC__ \
04299      || defined __cplusplus || defined _MSC_VER)
04300 static void
04301 yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
04302 #else
04303 static void
04304 yy_stack_print (yybottom, yytop)
04305     yytype_int16 *yybottom;
04306     yytype_int16 *yytop;
04307 #endif
04308 {
04309   YYFPRINTF (stderr, "Stack now");
04310   for (; yybottom <= yytop; yybottom++)
04311     {
04312       int yybot = *yybottom;
04313       YYFPRINTF (stderr, " %d", yybot);
04314     }
04315   YYFPRINTF (stderr, "\n");
04316 }
04317 
04318 # define YY_STACK_PRINT(Bottom, Top)                            \
04319 do {                                                            \
04320   if (yydebug)                                                  \
04321     yy_stack_print ((Bottom), (Top));                           \
04322 } while (YYID (0))
04323 
04324 
04325 /*------------------------------------------------.
04326 | Report that the YYRULE is going to be reduced.  |
04327 `------------------------------------------------*/
04328 
04329 #if (defined __STDC__ || defined __C99__FUNC__ \
04330      || defined __cplusplus || defined _MSC_VER)
04331 static void
04332 yy_reduce_print (YYSTYPE *yyvsp, int yyrule, struct parser_params *parser)
04333 #else
04334 static void
04335 yy_reduce_print (yyvsp, yyrule, parser)
04336     YYSTYPE *yyvsp;
04337     int yyrule;
04338     struct parser_params *parser;
04339 #endif
04340 {
04341   int yynrhs = yyr2[yyrule];
04342   int yyi;
04343   unsigned long int yylno = yyrline[yyrule];
04344   YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
04345              yyrule - 1, yylno);
04346   /* The symbols being reduced.  */
04347   for (yyi = 0; yyi < yynrhs; yyi++)
04348     {
04349       YYFPRINTF (stderr, "   $%d = ", yyi + 1);
04350       yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
04351                        &(yyvsp[(yyi + 1) - (yynrhs)])
04352                                        , parser);
04353       YYFPRINTF (stderr, "\n");
04354     }
04355 }
04356 
04357 # define YY_REDUCE_PRINT(Rule)          \
04358 do {                                    \
04359   if (yydebug)                          \
04360     yy_reduce_print (yyvsp, Rule, parser); \
04361 } while (YYID (0))
04362 
04363 /* Nonzero means print parse trace.  It is left uninitialized so that
04364    multiple parsers can coexist.  */
04365 #ifndef yydebug
04366 int yydebug;
04367 #endif
04368 #else /* !YYDEBUG */
04369 # define YYDPRINTF(Args)
04370 # define YY_SYMBOL_PRINT(Title, Type, Value, Location)
04371 # define YY_STACK_PRINT(Bottom, Top)
04372 # define YY_REDUCE_PRINT(Rule)
04373 #endif /* !YYDEBUG */
04374 
04375 
04376 /* YYINITDEPTH -- initial size of the parser's stacks.  */
04377 #ifndef YYINITDEPTH
04378 # define YYINITDEPTH 200
04379 #endif
04380 
04381 /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
04382    if the built-in stack extension method is used).
04383 
04384    Do not make this value too large; the results are undefined if
04385    YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
04386    evaluated with infinite-precision integer arithmetic.  */
04387 
04388 #ifndef YYMAXDEPTH
04389 # define YYMAXDEPTH 10000
04390 #endif
04391 
04392 
04393 
04394 #if YYERROR_VERBOSE
04395 
04396 # ifndef yystrlen
04397 #  if defined __GLIBC__ && defined _STRING_H
04398 #   define yystrlen strlen
04399 #  else
04400 /* Return the length of YYSTR.  */
04401 #if (defined __STDC__ || defined __C99__FUNC__ \
04402      || defined __cplusplus || defined _MSC_VER)
04403 static YYSIZE_T
04404 yystrlen (const char *yystr)
04405 #else
04406 static YYSIZE_T
04407 yystrlen (yystr)
04408     const char *yystr;
04409 #endif
04410 {
04411   YYSIZE_T yylen;
04412   for (yylen = 0; yystr[yylen]; yylen++)
04413     continue;
04414   return yylen;
04415 }
04416 #  endif
04417 # endif
04418 
04419 # ifndef yystpcpy
04420 #  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
04421 #   define yystpcpy stpcpy
04422 #  else
04423 /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
04424    YYDEST.  */
04425 #if (defined __STDC__ || defined __C99__FUNC__ \
04426      || defined __cplusplus || defined _MSC_VER)
04427 static char *
04428 yystpcpy (char *yydest, const char *yysrc)
04429 #else
04430 static char *
04431 yystpcpy (yydest, yysrc)
04432     char *yydest;
04433     const char *yysrc;
04434 #endif
04435 {
04436   char *yyd = yydest;
04437   const char *yys = yysrc;
04438 
04439   while ((*yyd++ = *yys++) != '\0')
04440     continue;
04441 
04442   return yyd - 1;
04443 }
04444 #  endif
04445 # endif
04446 
04447 # ifndef yytnamerr
04448 /* Copy to YYRES the contents of YYSTR after stripping away unnecessary
04449    quotes and backslashes, so that it's suitable for yyerror.  The
04450    heuristic is that double-quoting is unnecessary unless the string
04451    contains an apostrophe, a comma, or backslash (other than
04452    backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
04453    null, do not copy; instead, return the length of what the result
04454    would have been.  */
04455 static YYSIZE_T
04456 yytnamerr (char *yyres, const char *yystr)
04457 {
04458   if (*yystr == '"')
04459     {
04460       YYSIZE_T yyn = 0;
04461       char const *yyp = yystr;
04462 
04463       for (;;)
04464         switch (*++yyp)
04465           {
04466           case '\'':
04467           case ',':
04468             goto do_not_strip_quotes;
04469 
04470           case '\\':
04471             if (*++yyp != '\\')
04472               goto do_not_strip_quotes;
04473             /* Fall through.  */
04474           default:
04475             if (yyres)
04476               yyres[yyn] = *yyp;
04477             yyn++;
04478             break;
04479 
04480           case '"':
04481             if (yyres)
04482               yyres[yyn] = '\0';
04483             return yyn;
04484           }
04485     do_not_strip_quotes: ;
04486     }
04487 
04488   if (! yyres)
04489     return yystrlen (yystr);
04490 
04491   return yystpcpy (yyres, yystr) - yyres;
04492 }
04493 # endif
04494 
04495 /* Copy into YYRESULT an error message about the unexpected token
04496    YYCHAR while in state YYSTATE.  Return the number of bytes copied,
04497    including the terminating null byte.  If YYRESULT is null, do not
04498    copy anything; just return the number of bytes that would be
04499    copied.  As a special case, return 0 if an ordinary "syntax error"
04500    message will do.  Return YYSIZE_MAXIMUM if overflow occurs during
04501    size calculation.  */
04502 static YYSIZE_T
04503 yysyntax_error (char *yyresult, int yystate, int yychar)
04504 {
04505   int yyn = yypact[yystate];
04506 
04507   if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
04508     return 0;
04509   else
04510     {
04511       int yytype = YYTRANSLATE (yychar);
04512       YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
04513       YYSIZE_T yysize = yysize0;
04514       YYSIZE_T yysize1;
04515       int yysize_overflow = 0;
04516       enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
04517       char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
04518       int yyx;
04519 
04520 # if 0
04521       /* This is so xgettext sees the translatable formats that are
04522          constructed on the fly.  */
04523       YY_("syntax error, unexpected %s");
04524       YY_("syntax error, unexpected %s, expecting %s");
04525       YY_("syntax error, unexpected %s, expecting %s or %s");
04526       YY_("syntax error, unexpected %s, expecting %s or %s or %s");
04527       YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
04528 # endif
04529       char *yyfmt;
04530       char const *yyf;
04531       static char const yyunexpected[] = "syntax error, unexpected %s";
04532       static char const yyexpecting[] = ", expecting %s";
04533       static char const yyor[] = " or %s";
04534       char yyformat[sizeof yyunexpected
04535                     + sizeof yyexpecting - 1
04536                     + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
04537                        * (sizeof yyor - 1))];
04538       char const *yyprefix = yyexpecting;
04539 
04540       /* Start YYX at -YYN if negative to avoid negative indexes in
04541          YYCHECK.  */
04542       int yyxbegin = yyn < 0 ? -yyn : 0;
04543 
04544       /* Stay within bounds of both yycheck and yytname.  */
04545       int yychecklim = YYLAST - yyn + 1;
04546       int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
04547       int yycount = 1;
04548 
04549       yyarg[0] = yytname[yytype];
04550       yyfmt = yystpcpy (yyformat, yyunexpected);
04551 
04552       for (yyx = yyxbegin; yyx < yyxend; ++yyx)
04553         if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
04554           {
04555             if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
04556               {
04557                 yycount = 1;
04558                 yysize = yysize0;
04559                 yyformat[sizeof yyunexpected - 1] = '\0';
04560                 break;
04561               }
04562             yyarg[yycount++] = yytname[yyx];
04563             yysize1 = yysize + yytnamerr (0, yytname[yyx]);
04564             yysize_overflow |= (yysize1 < yysize);
04565             yysize = yysize1;
04566             yyfmt = yystpcpy (yyfmt, yyprefix);
04567             yyprefix = yyor;
04568           }
04569 
04570       yyf = YY_(yyformat);
04571       yysize1 = yysize + yystrlen (yyf);
04572       yysize_overflow |= (yysize1 < yysize);
04573       yysize = yysize1;
04574 
04575       if (yysize_overflow)
04576         return YYSIZE_MAXIMUM;
04577 
04578       if (yyresult)
04579         {
04580           /* Avoid sprintf, as that infringes on the user's name space.
04581              Don't have undefined behavior even if the translation
04582              produced a string with the wrong number of "%s"s.  */
04583           char *yyp = yyresult;
04584           int yyi = 0;
04585           while ((*yyp = *yyf) != '\0')
04586             {
04587               if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
04588                 {
04589                   yyp += yytnamerr (yyp, yyarg[yyi++]);
04590                   yyf += 2;
04591                 }
04592               else
04593                 {
04594                   yyp++;
04595                   yyf++;
04596                 }
04597             }
04598         }
04599       return yysize;
04600     }
04601 }
04602 #endif /* YYERROR_VERBOSE */
04603 
04604 
04605 /*-----------------------------------------------.
04606 | Release the memory associated to this symbol.  |
04607 `-----------------------------------------------*/
04608 
04609 /*ARGSUSED*/
04610 #if (defined __STDC__ || defined __C99__FUNC__ \
04611      || defined __cplusplus || defined _MSC_VER)
04612 static void
04613 yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, struct parser_params *parser)
04614 #else
04615 static void
04616 yydestruct (yymsg, yytype, yyvaluep, parser)
04617     const char *yymsg;
04618     int yytype;
04619     YYSTYPE *yyvaluep;
04620     struct parser_params *parser;
04621 #endif
04622 {
04623   YYUSE (yyvaluep);
04624   YYUSE (parser);
04625 
04626   if (!yymsg)
04627     yymsg = "Deleting";
04628   YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
04629 
04630   switch (yytype)
04631     {
04632 
04633       default:
04634         break;
04635     }
04636 }
04637 
04638 /* Prevent warnings from -Wmissing-prototypes.  */
04639 #ifdef YYPARSE_PARAM
04640 #if defined __STDC__ || defined __cplusplus
04641 int yyparse (void *YYPARSE_PARAM);
04642 #else
04643 int yyparse ();
04644 #endif
04645 #else /* ! YYPARSE_PARAM */
04646 #if defined __STDC__ || defined __cplusplus
04647 int yyparse (struct parser_params *parser);
04648 #else
04649 int yyparse ();
04650 #endif
04651 #endif /* ! YYPARSE_PARAM */
04652 
04653 
04654 
04655 
04656 
04657 /*-------------------------.
04658 | yyparse or yypush_parse.  |
04659 `-------------------------*/
04660 
04661 #ifdef YYPARSE_PARAM
04662 #if (defined __STDC__ || defined __C99__FUNC__ \
04663      || defined __cplusplus || defined _MSC_VER)
04664 int
04665 yyparse (void *YYPARSE_PARAM)
04666 #else
04667 int
04668 yyparse (YYPARSE_PARAM)
04669     void *YYPARSE_PARAM;
04670 #endif
04671 #else /* ! YYPARSE_PARAM */
04672 #if (defined __STDC__ || defined __C99__FUNC__ \
04673      || defined __cplusplus || defined _MSC_VER)
04674 int
04675 yyparse (struct parser_params *parser)
04676 #else
04677 int
04678 yyparse (parser)
04679     struct parser_params *parser;
04680 #endif
04681 #endif
04682 {
04683 /* The lookahead symbol.  */
04684 int yychar;
04685 
04686 /* The semantic value of the lookahead symbol.  */
04687 YYSTYPE yylval;
04688 
04689     /* Number of syntax errors so far.  */
04690     int yynerrs;
04691 
04692     int yystate;
04693     /* Number of tokens to shift before error messages enabled.  */
04694     int yyerrstatus;
04695 
04696     /* The stacks and their tools:
04697        `yyss': related to states.
04698        `yyvs': related to semantic values.
04699 
04700        Refer to the stacks thru separate pointers, to allow yyoverflow
04701        to reallocate them elsewhere.  */
04702 
04703     /* The state stack.  */
04704     yytype_int16 yyssa[YYINITDEPTH];
04705     yytype_int16 *yyss;
04706     yytype_int16 *yyssp;
04707 
04708     /* The semantic value stack.  */
04709     YYSTYPE yyvsa[YYINITDEPTH];
04710     YYSTYPE *yyvs;
04711     YYSTYPE *yyvsp;
04712 
04713     YYSIZE_T yystacksize;
04714 
04715   int yyn;
04716   int yyresult;
04717   /* Lookahead token as an internal (translated) token number.  */
04718   int yytoken;
04719   /* The variables used to return semantic value and location from the
04720      action routines.  */
04721   YYSTYPE yyval;
04722 
04723 #if YYERROR_VERBOSE
04724   /* Buffer for error messages, and its allocated size.  */
04725   char yymsgbuf[128];
04726   char *yymsg = yymsgbuf;
04727   YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
04728 #endif
04729 
04730 #define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
04731 
04732   /* The number of symbols on the RHS of the reduced rule.
04733      Keep to zero when no symbol should be popped.  */
04734   int yylen = 0;
04735 
04736   yytoken = 0;
04737   yyss = yyssa;
04738   yyvs = yyvsa;
04739   yystacksize = YYINITDEPTH;
04740 
04741   YYDPRINTF ((stderr, "Starting parse\n"));
04742 
04743   yystate = 0;
04744   yyerrstatus = 0;
04745   yynerrs = 0;
04746   yychar = YYEMPTY; /* Cause a token to be read.  */
04747 
04748   /* Initialize stack pointers.
04749      Waste one element of value and location stack
04750      so that they stay on the same level as the state stack.
04751      The wasted elements are never initialized.  */
04752   yyssp = yyss;
04753   yyvsp = yyvs;
04754 
04755   goto yysetstate;
04756 
04757 /*------------------------------------------------------------.
04758 | yynewstate -- Push a new state, which is found in yystate.  |
04759 `------------------------------------------------------------*/
04760  yynewstate:
04761   /* In all cases, when you get here, the value and location stacks
04762      have just been pushed.  So pushing a state here evens the stacks.  */
04763   yyssp++;
04764 
04765  yysetstate:
04766   *yyssp = yystate;
04767 
04768   if (yyss + yystacksize - 1 <= yyssp)
04769     {
04770       /* Get the current used size of the three stacks, in elements.  */
04771       YYSIZE_T yysize = yyssp - yyss + 1;
04772 
04773 #ifdef yyoverflow
04774       {
04775         /* Give user a chance to reallocate the stack.  Use copies of
04776            these so that the &'s don't force the real ones into
04777            memory.  */
04778         YYSTYPE *yyvs1 = yyvs;
04779         yytype_int16 *yyss1 = yyss;
04780 
04781         /* Each stack pointer address is followed by the size of the
04782            data in use in that stack, in bytes.  This used to be a
04783            conditional around just the two extra args, but that might
04784            be undefined if yyoverflow is a macro.  */
04785         yyoverflow (YY_("memory exhausted"),
04786                     &yyss1, yysize * sizeof (*yyssp),
04787                     &yyvs1, yysize * sizeof (*yyvsp),
04788                     &yystacksize);
04789 
04790         yyss = yyss1;
04791         yyvs = yyvs1;
04792       }
04793 #else /* no yyoverflow */
04794 # ifndef YYSTACK_RELOCATE
04795       goto yyexhaustedlab;
04796 # else
04797       /* Extend the stack our own way.  */
04798       if (YYMAXDEPTH <= yystacksize)
04799         goto yyexhaustedlab;
04800       yystacksize *= 2;
04801       if (YYMAXDEPTH < yystacksize)
04802         yystacksize = YYMAXDEPTH;
04803 
04804       {
04805         yytype_int16 *yyss1 = yyss;
04806         union yyalloc *yyptr =
04807           (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
04808         if (! yyptr)
04809           goto yyexhaustedlab;
04810         YYSTACK_RELOCATE (yyss_alloc, yyss);
04811         YYSTACK_RELOCATE (yyvs_alloc, yyvs);
04812 #  undef YYSTACK_RELOCATE
04813         if (yyss1 != yyssa)
04814           YYSTACK_FREE (yyss1);
04815       }
04816 # endif
04817 #endif /* no yyoverflow */
04818 
04819       yyssp = yyss + yysize - 1;
04820       yyvsp = yyvs + yysize - 1;
04821 
04822       YYDPRINTF ((stderr, "Stack size increased to %lu\n",
04823                   (unsigned long int) yystacksize));
04824 
04825       if (yyss + yystacksize - 1 <= yyssp)
04826         YYABORT;
04827     }
04828 
04829   YYDPRINTF ((stderr, "Entering state %d\n", yystate));
04830 
04831   if (yystate == YYFINAL)
04832     YYACCEPT;
04833 
04834   goto yybackup;
04835 
04836 /*-----------.
04837 | yybackup.  |
04838 `-----------*/
04839 yybackup:
04840 
04841   /* Do appropriate processing given the current state.  Read a
04842      lookahead token if we need one and don't already have one.  */
04843 
04844   /* First try to decide what to do without reference to lookahead token.  */
04845   yyn = yypact[yystate];
04846   if (yyn == YYPACT_NINF)
04847     goto yydefault;
04848 
04849   /* Not known => get a lookahead token if don't already have one.  */
04850 
04851   /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
04852   if (yychar == YYEMPTY)
04853     {
04854       YYDPRINTF ((stderr, "Reading a token: "));
04855       yychar = YYLEX;
04856     }
04857 
04858   if (yychar <= YYEOF)
04859     {
04860       yychar = yytoken = YYEOF;
04861       YYDPRINTF ((stderr, "Now at end of input.\n"));
04862     }
04863   else
04864     {
04865       yytoken = YYTRANSLATE (yychar);
04866       YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
04867     }
04868 
04869   /* If the proper action on seeing token YYTOKEN is to reduce or to
04870      detect an error, take that action.  */
04871   yyn += yytoken;
04872   if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
04873     goto yydefault;
04874   yyn = yytable[yyn];
04875   if (yyn <= 0)
04876     {
04877       if (yyn == 0 || yyn == YYTABLE_NINF)
04878         goto yyerrlab;
04879       yyn = -yyn;
04880       goto yyreduce;
04881     }
04882 
04883   /* Count tokens shifted since error; after three, turn off error
04884      status.  */
04885   if (yyerrstatus)
04886     yyerrstatus--;
04887 
04888   /* Shift the lookahead token.  */
04889   YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
04890 
04891   /* Discard the shifted token.  */
04892   yychar = YYEMPTY;
04893 
04894   yystate = yyn;
04895   *++yyvsp = yylval;
04896 
04897   goto yynewstate;
04898 
04899 
04900 /*-----------------------------------------------------------.
04901 | yydefault -- do the default action for the current state.  |
04902 `-----------------------------------------------------------*/
04903 yydefault:
04904   yyn = yydefact[yystate];
04905   if (yyn == 0)
04906     goto yyerrlab;
04907   goto yyreduce;
04908 
04909 
04910 /*-----------------------------.
04911 | yyreduce -- Do a reduction.  |
04912 `-----------------------------*/
04913 yyreduce:
04914   /* yyn is the number of a rule to reduce with.  */
04915   yylen = yyr2[yyn];
04916 
04917   /* If YYLEN is nonzero, implement the default value of the action:
04918      `$$ = $1'.
04919 
04920      Otherwise, the following line sets YYVAL to garbage.
04921      This behavior is undocumented and Bison
04922      users should not rely upon it.  Assigning to YYVAL
04923      unconditionally makes the parser a bit smaller, and it avoids a
04924      GCC warning that YYVAL may be used uninitialized.  */
04925   yyval = yyvsp[1-yylen];
04926 
04927 
04928   YY_REDUCE_PRINT (yyn);
04929   switch (yyn)
04930     {
04931         case 2:
04932 
04933 /* Line 1464 of yacc.c  */
04934 #line 786 "parse.y"
04935     {
04936                         lex_state = EXPR_BEG;
04937                     /*%%%*/
04938                         local_push(compile_for_eval || rb_parse_in_main());
04939                     /*%
04940                         local_push(0);
04941                     %*/
04942                     ;}
04943     break;
04944 
04945   case 3:
04946 
04947 /* Line 1464 of yacc.c  */
04948 #line 795 "parse.y"
04949     {
04950                     /*%%%*/
04951                         if ((yyvsp[(2) - (2)].node) && !compile_for_eval) {
04952                             /* last expression should not be void */
04953                             if (nd_type((yyvsp[(2) - (2)].node)) != NODE_BLOCK) void_expr((yyvsp[(2) - (2)].node));
04954                             else {
04955                                 NODE *node = (yyvsp[(2) - (2)].node);
04956                                 while (node->nd_next) {
04957                                     node = node->nd_next;
04958                                 }
04959                                 void_expr(node->nd_head);
04960                             }
04961                         }
04962                         ruby_eval_tree = NEW_SCOPE(0, block_append(ruby_eval_tree, (yyvsp[(2) - (2)].node)));
04963                     /*%
04964                         $$ = $2;
04965                         parser->result = dispatch1(program, $$);
04966                     %*/
04967                         local_pop();
04968                     ;}
04969     break;
04970 
04971   case 4:
04972 
04973 /* Line 1464 of yacc.c  */
04974 #line 818 "parse.y"
04975     {
04976                     /*%%%*/
04977                         void_stmts((yyvsp[(1) - (2)].node));
04978                         fixup_nodes(&deferred_nodes);
04979                     /*%
04980                     %*/
04981                         (yyval.node) = (yyvsp[(1) - (2)].node);
04982                     ;}
04983     break;
04984 
04985   case 5:
04986 
04987 /* Line 1464 of yacc.c  */
04988 #line 829 "parse.y"
04989     {
04990                     /*%%%*/
04991                         (yyval.node) = NEW_BEGIN(0);
04992                     /*%
04993                         $$ = dispatch2(stmts_add, dispatch0(stmts_new),
04994                                                   dispatch0(void_stmt));
04995                     %*/
04996                     ;}
04997     break;
04998 
04999   case 6:
05000 
05001 /* Line 1464 of yacc.c  */
05002 #line 838 "parse.y"
05003     {
05004                     /*%%%*/
05005                         (yyval.node) = newline_node((yyvsp[(1) - (1)].node));
05006                     /*%
05007                         $$ = dispatch2(stmts_add, dispatch0(stmts_new), $1);
05008                     %*/
05009                     ;}
05010     break;
05011 
05012   case 7:
05013 
05014 /* Line 1464 of yacc.c  */
05015 #line 846 "parse.y"
05016     {
05017                     /*%%%*/
05018                         (yyval.node) = block_append((yyvsp[(1) - (3)].node), newline_node((yyvsp[(3) - (3)].node)));
05019                     /*%
05020                         $$ = dispatch2(stmts_add, $1, $3);
05021                     %*/
05022                     ;}
05023     break;
05024 
05025   case 8:
05026 
05027 /* Line 1464 of yacc.c  */
05028 #line 854 "parse.y"
05029     {
05030                         (yyval.node) = remove_begin((yyvsp[(2) - (2)].node));
05031                     ;}
05032     break;
05033 
05034   case 10:
05035 
05036 /* Line 1464 of yacc.c  */
05037 #line 861 "parse.y"
05038     {
05039                         if (in_def || in_single) {
05040                             yyerror("BEGIN in method");
05041                         }
05042                     /*%%%*/
05043                         /* local_push(0); */
05044                     /*%
05045                     %*/
05046                     ;}
05047     break;
05048 
05049   case 11:
05050 
05051 /* Line 1464 of yacc.c  */
05052 #line 871 "parse.y"
05053     {
05054                     /*%%%*/
05055                         ruby_eval_tree_begin = block_append(ruby_eval_tree_begin,
05056                                                             (yyvsp[(4) - (5)].node));
05057                         /* NEW_PREEXE($4)); */
05058                         /* local_pop(); */
05059                         (yyval.node) = NEW_BEGIN(0);
05060                     /*%
05061                         $$ = dispatch1(BEGIN, $4);
05062                     %*/
05063                     ;}
05064     break;
05065 
05066   case 12:
05067 
05068 /* Line 1464 of yacc.c  */
05069 #line 888 "parse.y"
05070     {
05071                     /*%%%*/
05072                         (yyval.node) = (yyvsp[(1) - (4)].node);
05073                         if ((yyvsp[(2) - (4)].node)) {
05074                             (yyval.node) = NEW_RESCUE((yyvsp[(1) - (4)].node), (yyvsp[(2) - (4)].node), (yyvsp[(3) - (4)].node));
05075                         }
05076                         else if ((yyvsp[(3) - (4)].node)) {
05077                             rb_warn0("else without rescue is useless");
05078                             (yyval.node) = block_append((yyval.node), (yyvsp[(3) - (4)].node));
05079                         }
05080                         if ((yyvsp[(4) - (4)].node)) {
05081                             if ((yyval.node)) {
05082                                 (yyval.node) = NEW_ENSURE((yyval.node), (yyvsp[(4) - (4)].node));
05083                             }
05084                             else {
05085                                 (yyval.node) = block_append((yyvsp[(4) - (4)].node), NEW_NIL());
05086                             }
05087                         }
05088                         fixpos((yyval.node), (yyvsp[(1) - (4)].node));
05089                     /*%
05090                         $$ = dispatch4(bodystmt,
05091                                        escape_Qundef($1),
05092                                        escape_Qundef($2),
05093                                        escape_Qundef($3),
05094                                        escape_Qundef($4));
05095                     %*/
05096                     ;}
05097     break;
05098 
05099   case 13:
05100 
05101 /* Line 1464 of yacc.c  */
05102 #line 918 "parse.y"
05103     {
05104                     /*%%%*/
05105                         void_stmts((yyvsp[(1) - (2)].node));
05106                         fixup_nodes(&deferred_nodes);
05107                     /*%
05108                     %*/
05109                         (yyval.node) = (yyvsp[(1) - (2)].node);
05110                     ;}
05111     break;
05112 
05113   case 14:
05114 
05115 /* Line 1464 of yacc.c  */
05116 #line 929 "parse.y"
05117     {
05118                     /*%%%*/
05119                         (yyval.node) = NEW_BEGIN(0);
05120                     /*%
05121                         $$ = dispatch2(stmts_add, dispatch0(stmts_new),
05122                                                   dispatch0(void_stmt));
05123                     %*/
05124                     ;}
05125     break;
05126 
05127   case 15:
05128 
05129 /* Line 1464 of yacc.c  */
05130 #line 938 "parse.y"
05131     {
05132                     /*%%%*/
05133                         (yyval.node) = newline_node((yyvsp[(1) - (1)].node));
05134                     /*%
05135                         $$ = dispatch2(stmts_add, dispatch0(stmts_new), $1);
05136                     %*/
05137                     ;}
05138     break;
05139 
05140   case 16:
05141 
05142 /* Line 1464 of yacc.c  */
05143 #line 946 "parse.y"
05144     {
05145                     /*%%%*/
05146                         (yyval.node) = block_append((yyvsp[(1) - (3)].node), newline_node((yyvsp[(3) - (3)].node)));
05147                     /*%
05148                         $$ = dispatch2(stmts_add, $1, $3);
05149                     %*/
05150                     ;}
05151     break;
05152 
05153   case 17:
05154 
05155 /* Line 1464 of yacc.c  */
05156 #line 954 "parse.y"
05157     {
05158                         (yyval.node) = remove_begin((yyvsp[(2) - (2)].node));
05159                     ;}
05160     break;
05161 
05162   case 18:
05163 
05164 /* Line 1464 of yacc.c  */
05165 #line 959 "parse.y"
05166     {lex_state = EXPR_FNAME;;}
05167     break;
05168 
05169   case 19:
05170 
05171 /* Line 1464 of yacc.c  */
05172 #line 960 "parse.y"
05173     {
05174                     /*%%%*/
05175                         (yyval.node) = NEW_ALIAS((yyvsp[(2) - (4)].node), (yyvsp[(4) - (4)].node));
05176                     /*%
05177                         $$ = dispatch2(alias, $2, $4);
05178                     %*/
05179                     ;}
05180     break;
05181 
05182   case 20:
05183 
05184 /* Line 1464 of yacc.c  */
05185 #line 968 "parse.y"
05186     {
05187                     /*%%%*/
05188                         (yyval.node) = NEW_VALIAS((yyvsp[(2) - (3)].id), (yyvsp[(3) - (3)].id));
05189                     /*%
05190                         $$ = dispatch2(var_alias, $2, $3);
05191                     %*/
05192                     ;}
05193     break;
05194 
05195   case 21:
05196 
05197 /* Line 1464 of yacc.c  */
05198 #line 976 "parse.y"
05199     {
05200                     /*%%%*/
05201                         char buf[2];
05202                         buf[0] = '$';
05203                         buf[1] = (char)(yyvsp[(3) - (3)].node)->nd_nth;
05204                         (yyval.node) = NEW_VALIAS((yyvsp[(2) - (3)].id), rb_intern2(buf, 2));
05205                     /*%
05206                         $$ = dispatch2(var_alias, $2, $3);
05207                     %*/
05208                     ;}
05209     break;
05210 
05211   case 22:
05212 
05213 /* Line 1464 of yacc.c  */
05214 #line 987 "parse.y"
05215     {
05216                     /*%%%*/
05217                         yyerror("can't make alias for the number variables");
05218                         (yyval.node) = NEW_BEGIN(0);
05219                     /*%
05220                         $$ = dispatch2(var_alias, $2, $3);
05221                         $$ = dispatch1(alias_error, $$);
05222                     %*/
05223                     ;}
05224     break;
05225 
05226   case 23:
05227 
05228 /* Line 1464 of yacc.c  */
05229 #line 997 "parse.y"
05230     {
05231                     /*%%%*/
05232                         (yyval.node) = (yyvsp[(2) - (2)].node);
05233                     /*%
05234                         $$ = dispatch1(undef, $2);
05235                     %*/
05236                     ;}
05237     break;
05238 
05239   case 24:
05240 
05241 /* Line 1464 of yacc.c  */
05242 #line 1005 "parse.y"
05243     {
05244                     /*%%%*/
05245                         (yyval.node) = NEW_IF(cond((yyvsp[(3) - (3)].node)), remove_begin((yyvsp[(1) - (3)].node)), 0);
05246                         fixpos((yyval.node), (yyvsp[(3) - (3)].node));
05247                     /*%
05248                         $$ = dispatch2(if_mod, $3, $1);
05249                     %*/
05250                     ;}
05251     break;
05252 
05253   case 25:
05254 
05255 /* Line 1464 of yacc.c  */
05256 #line 1014 "parse.y"
05257     {
05258                     /*%%%*/
05259                         (yyval.node) = NEW_UNLESS(cond((yyvsp[(3) - (3)].node)), remove_begin((yyvsp[(1) - (3)].node)), 0);
05260                         fixpos((yyval.node), (yyvsp[(3) - (3)].node));
05261                     /*%
05262                         $$ = dispatch2(unless_mod, $3, $1);
05263                     %*/
05264                     ;}
05265     break;
05266 
05267   case 26:
05268 
05269 /* Line 1464 of yacc.c  */
05270 #line 1023 "parse.y"
05271     {
05272                     /*%%%*/
05273                         if ((yyvsp[(1) - (3)].node) && nd_type((yyvsp[(1) - (3)].node)) == NODE_BEGIN) {
05274                             (yyval.node) = NEW_WHILE(cond((yyvsp[(3) - (3)].node)), (yyvsp[(1) - (3)].node)->nd_body, 0);
05275                         }
05276                         else {
05277                             (yyval.node) = NEW_WHILE(cond((yyvsp[(3) - (3)].node)), (yyvsp[(1) - (3)].node), 1);
05278                         }
05279                     /*%
05280                         $$ = dispatch2(while_mod, $3, $1);
05281                     %*/
05282                     ;}
05283     break;
05284 
05285   case 27:
05286 
05287 /* Line 1464 of yacc.c  */
05288 #line 1036 "parse.y"
05289     {
05290                     /*%%%*/
05291                         if ((yyvsp[(1) - (3)].node) && nd_type((yyvsp[(1) - (3)].node)) == NODE_BEGIN) {
05292                             (yyval.node) = NEW_UNTIL(cond((yyvsp[(3) - (3)].node)), (yyvsp[(1) - (3)].node)->nd_body, 0);
05293                         }
05294                         else {
05295                             (yyval.node) = NEW_UNTIL(cond((yyvsp[(3) - (3)].node)), (yyvsp[(1) - (3)].node), 1);
05296                         }
05297                     /*%
05298                         $$ = dispatch2(until_mod, $3, $1);
05299                     %*/
05300                     ;}
05301     break;
05302 
05303   case 28:
05304 
05305 /* Line 1464 of yacc.c  */
05306 #line 1049 "parse.y"
05307     {
05308                     /*%%%*/
05309                         NODE *resq = NEW_RESBODY(0, remove_begin((yyvsp[(3) - (3)].node)), 0);
05310                         (yyval.node) = NEW_RESCUE(remove_begin((yyvsp[(1) - (3)].node)), resq, 0);
05311                     /*%
05312                         $$ = dispatch2(rescue_mod, $3, $1);
05313                     %*/
05314                     ;}
05315     break;
05316 
05317   case 29:
05318 
05319 /* Line 1464 of yacc.c  */
05320 #line 1058 "parse.y"
05321     {
05322                         if (in_def || in_single) {
05323                             rb_warn0("END in method; use at_exit");
05324                         }
05325                     /*%%%*/
05326                         (yyval.node) = NEW_POSTEXE(NEW_NODE(
05327                             NODE_SCOPE, 0 /* tbl */, (yyvsp[(3) - (4)].node) /* body */, 0 /* args */));
05328                     /*%
05329                         $$ = dispatch1(END, $3);
05330                     %*/
05331                     ;}
05332     break;
05333 
05334   case 30:
05335 
05336 /* Line 1464 of yacc.c  */
05337 #line 1070 "parse.y"
05338     {
05339                     /*%%%*/
05340                         value_expr((yyvsp[(3) - (3)].node));
05341                         (yyval.node) = node_assign((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
05342                     /*%
05343                         $$ = dispatch2(assign, $1, $3);
05344                     %*/
05345                     ;}
05346     break;
05347 
05348   case 31:
05349 
05350 /* Line 1464 of yacc.c  */
05351 #line 1079 "parse.y"
05352     {
05353                     /*%%%*/
05354                         value_expr((yyvsp[(3) - (3)].node));
05355                         (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
05356                         (yyval.node) = (yyvsp[(1) - (3)].node);
05357                     /*%
05358                         $$ = dispatch2(massign, $1, $3);
05359                     %*/
05360                     ;}
05361     break;
05362 
05363   case 32:
05364 
05365 /* Line 1464 of yacc.c  */
05366 #line 1089 "parse.y"
05367     {
05368                     /*%%%*/
05369                         value_expr((yyvsp[(3) - (3)].node));
05370                         if ((yyvsp[(1) - (3)].node)) {
05371                             ID vid = (yyvsp[(1) - (3)].node)->nd_vid;
05372                             if ((yyvsp[(2) - (3)].id) == tOROP) {
05373                                 (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
05374                                 (yyval.node) = NEW_OP_ASGN_OR(gettable(vid), (yyvsp[(1) - (3)].node));
05375                                 if (is_asgn_or_id(vid)) {
05376                                     (yyval.node)->nd_aid = vid;
05377                                 }
05378                             }
05379                             else if ((yyvsp[(2) - (3)].id) == tANDOP) {
05380                                 (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
05381                                 (yyval.node) = NEW_OP_ASGN_AND(gettable(vid), (yyvsp[(1) - (3)].node));
05382                             }
05383                             else {
05384                                 (yyval.node) = (yyvsp[(1) - (3)].node);
05385                                 (yyval.node)->nd_value = NEW_CALL(gettable(vid), (yyvsp[(2) - (3)].id), NEW_LIST((yyvsp[(3) - (3)].node)));
05386                             }
05387                         }
05388                         else {
05389                             (yyval.node) = NEW_BEGIN(0);
05390                         }
05391                     /*%
05392                         $$ = dispatch3(opassign, $1, $2, $3);
05393                     %*/
05394                     ;}
05395     break;
05396 
05397   case 33:
05398 
05399 /* Line 1464 of yacc.c  */
05400 #line 1118 "parse.y"
05401     {
05402                     /*%%%*/
05403                         NODE *args;
05404 
05405                         value_expr((yyvsp[(6) - (6)].node));
05406                         if (!(yyvsp[(3) - (6)].node)) (yyvsp[(3) - (6)].node) = NEW_ZARRAY();
05407                         args = arg_concat((yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node));
05408                         if ((yyvsp[(5) - (6)].id) == tOROP) {
05409                             (yyvsp[(5) - (6)].id) = 0;
05410                         }
05411                         else if ((yyvsp[(5) - (6)].id) == tANDOP) {
05412                             (yyvsp[(5) - (6)].id) = 1;
05413                         }
05414                         (yyval.node) = NEW_OP_ASGN1((yyvsp[(1) - (6)].node), (yyvsp[(5) - (6)].id), args);
05415                         fixpos((yyval.node), (yyvsp[(1) - (6)].node));
05416                     /*%
05417                         $$ = dispatch2(aref_field, $1, escape_Qundef($3));
05418                         $$ = dispatch3(opassign, $$, $5, $6);
05419                     %*/
05420                     ;}
05421     break;
05422 
05423   case 34:
05424 
05425 /* Line 1464 of yacc.c  */
05426 #line 1139 "parse.y"
05427     {
05428                     /*%%%*/
05429                         value_expr((yyvsp[(5) - (5)].node));
05430                         if ((yyvsp[(4) - (5)].id) == tOROP) {
05431                             (yyvsp[(4) - (5)].id) = 0;
05432                         }
05433                         else if ((yyvsp[(4) - (5)].id) == tANDOP) {
05434                             (yyvsp[(4) - (5)].id) = 1;
05435                         }
05436                         (yyval.node) = NEW_OP_ASGN2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
05437                         fixpos((yyval.node), (yyvsp[(1) - (5)].node));
05438                     /*%
05439                         $$ = dispatch3(field, $1, ripper_id2sym('.'), $3);
05440                         $$ = dispatch3(opassign, $$, $4, $5);
05441                     %*/
05442                     ;}
05443     break;
05444 
05445   case 35:
05446 
05447 /* Line 1464 of yacc.c  */
05448 #line 1156 "parse.y"
05449     {
05450                     /*%%%*/
05451                         value_expr((yyvsp[(5) - (5)].node));
05452                         if ((yyvsp[(4) - (5)].id) == tOROP) {
05453                             (yyvsp[(4) - (5)].id) = 0;
05454                         }
05455                         else if ((yyvsp[(4) - (5)].id) == tANDOP) {
05456                             (yyvsp[(4) - (5)].id) = 1;
05457                         }
05458                         (yyval.node) = NEW_OP_ASGN2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
05459                         fixpos((yyval.node), (yyvsp[(1) - (5)].node));
05460                     /*%
05461                         $$ = dispatch3(field, $1, ripper_id2sym('.'), $3);
05462                         $$ = dispatch3(opassign, $$, $4, $5);
05463                     %*/
05464                     ;}
05465     break;
05466 
05467   case 36:
05468 
05469 /* Line 1464 of yacc.c  */
05470 #line 1173 "parse.y"
05471     {
05472                         yyerror("constant re-assignment");
05473                         (yyval.node) = 0;
05474                     ;}
05475     break;
05476 
05477   case 37:
05478 
05479 /* Line 1464 of yacc.c  */
05480 #line 1178 "parse.y"
05481     {
05482                     /*%%%*/
05483                         value_expr((yyvsp[(5) - (5)].node));
05484                         if ((yyvsp[(4) - (5)].id) == tOROP) {
05485                             (yyvsp[(4) - (5)].id) = 0;
05486                         }
05487                         else if ((yyvsp[(4) - (5)].id) == tANDOP) {
05488                             (yyvsp[(4) - (5)].id) = 1;
05489                         }
05490                         (yyval.node) = NEW_OP_ASGN2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
05491                         fixpos((yyval.node), (yyvsp[(1) - (5)].node));
05492                     /*%
05493                         $$ = dispatch3(field, $1, ripper_intern("::"), $3);
05494                         $$ = dispatch3(opassign, $$, $4, $5);
05495                     %*/
05496                     ;}
05497     break;
05498 
05499   case 38:
05500 
05501 /* Line 1464 of yacc.c  */
05502 #line 1195 "parse.y"
05503     {
05504                     /*%%%*/
05505                         rb_backref_error((yyvsp[(1) - (3)].node));
05506                         (yyval.node) = NEW_BEGIN(0);
05507                     /*%
05508                         $$ = dispatch2(assign, dispatch1(var_field, $1), $3);
05509                         $$ = dispatch1(assign_error, $$);
05510                     %*/
05511                     ;}
05512     break;
05513 
05514   case 39:
05515 
05516 /* Line 1464 of yacc.c  */
05517 #line 1205 "parse.y"
05518     {
05519                     /*%%%*/
05520                         value_expr((yyvsp[(3) - (3)].node));
05521                         (yyval.node) = node_assign((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
05522                     /*%
05523                         $$ = dispatch2(assign, $1, $3);
05524                     %*/
05525                     ;}
05526     break;
05527 
05528   case 40:
05529 
05530 /* Line 1464 of yacc.c  */
05531 #line 1214 "parse.y"
05532     {
05533                     /*%%%*/
05534                         (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
05535                         (yyval.node) = (yyvsp[(1) - (3)].node);
05536                     /*%
05537                         $$ = dispatch2(massign, $1, $3);
05538                     %*/
05539                     ;}
05540     break;
05541 
05542   case 41:
05543 
05544 /* Line 1464 of yacc.c  */
05545 #line 1223 "parse.y"
05546     {
05547                     /*%%%*/
05548                         (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
05549                         (yyval.node) = (yyvsp[(1) - (3)].node);
05550                     /*%
05551                         $$ = dispatch2(massign, $1, $3);
05552                     %*/
05553                     ;}
05554     break;
05555 
05556   case 44:
05557 
05558 /* Line 1464 of yacc.c  */
05559 #line 1236 "parse.y"
05560     {
05561                     /*%%%*/
05562                         (yyval.node) = logop(NODE_AND, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
05563                     /*%
05564                         $$ = dispatch3(binary, $1, ripper_intern("and"), $3);
05565                     %*/
05566                     ;}
05567     break;
05568 
05569   case 45:
05570 
05571 /* Line 1464 of yacc.c  */
05572 #line 1244 "parse.y"
05573     {
05574                     /*%%%*/
05575                         (yyval.node) = logop(NODE_OR, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
05576                     /*%
05577                         $$ = dispatch3(binary, $1, ripper_intern("or"), $3);
05578                     %*/
05579                     ;}
05580     break;
05581 
05582   case 46:
05583 
05584 /* Line 1464 of yacc.c  */
05585 #line 1252 "parse.y"
05586     {
05587                     /*%%%*/
05588                         (yyval.node) = call_uni_op(cond((yyvsp[(3) - (3)].node)), '!');
05589                     /*%
05590                         $$ = dispatch2(unary, ripper_intern("not"), $3);
05591                     %*/
05592                     ;}
05593     break;
05594 
05595   case 47:
05596 
05597 /* Line 1464 of yacc.c  */
05598 #line 1260 "parse.y"
05599     {
05600                     /*%%%*/
05601                         (yyval.node) = call_uni_op(cond((yyvsp[(2) - (2)].node)), '!');
05602                     /*%
05603                         $$ = dispatch2(unary, ripper_id2sym('!'), $2);
05604                     %*/
05605                     ;}
05606     break;
05607 
05608   case 49:
05609 
05610 /* Line 1464 of yacc.c  */
05611 #line 1271 "parse.y"
05612     {
05613                     /*%%%*/
05614                         value_expr((yyvsp[(1) - (1)].node));
05615                         (yyval.node) = (yyvsp[(1) - (1)].node);
05616                         if (!(yyval.node)) (yyval.node) = NEW_NIL();
05617                     /*%
05618                         $$ = $1;
05619                     %*/
05620                     ;}
05621     break;
05622 
05623   case 53:
05624 
05625 /* Line 1464 of yacc.c  */
05626 #line 1288 "parse.y"
05627     {
05628                     /*%%%*/
05629                         (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
05630                     /*%
05631                         $$ = dispatch3(call, $1, ripper_id2sym('.'), $3);
05632                         $$ = method_arg($$, $4);
05633                     %*/
05634                     ;}
05635     break;
05636 
05637   case 54:
05638 
05639 /* Line 1464 of yacc.c  */
05640 #line 1297 "parse.y"
05641     {
05642                     /*%%%*/
05643                         (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
05644                     /*%
05645                         $$ = dispatch3(call, $1, ripper_intern("::"), $3);
05646                         $$ = method_arg($$, $4);
05647                     %*/
05648                     ;}
05649     break;
05650 
05651   case 55:
05652 
05653 /* Line 1464 of yacc.c  */
05654 #line 1308 "parse.y"
05655     {
05656                         (yyvsp[(1) - (1)].vars) = dyna_push();
05657                     /*%%%*/
05658                         (yyval.num) = ruby_sourceline;
05659                     /*%
05660                     %*/
05661                     ;}
05662     break;
05663 
05664   case 56:
05665 
05666 /* Line 1464 of yacc.c  */
05667 #line 1318 "parse.y"
05668     {
05669                     /*%%%*/
05670                         (yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node));
05671                         nd_set_line((yyval.node), (yyvsp[(2) - (5)].num));
05672                     /*%
05673                         $$ = dispatch2(brace_block, escape_Qundef($3), $4);
05674                     %*/
05675                         dyna_pop((yyvsp[(1) - (5)].vars));
05676                     ;}
05677     break;
05678 
05679   case 57:
05680 
05681 /* Line 1464 of yacc.c  */
05682 #line 1330 "parse.y"
05683     {
05684                     /*%%%*/
05685                         (yyval.node) = NEW_FCALL((yyvsp[(1) - (2)].id), (yyvsp[(2) - (2)].node));
05686                         fixpos((yyval.node), (yyvsp[(2) - (2)].node));
05687                     /*%
05688                         $$ = dispatch2(command, $1, $2);
05689                     %*/
05690                     ;}
05691     break;
05692 
05693   case 58:
05694 
05695 /* Line 1464 of yacc.c  */
05696 #line 1339 "parse.y"
05697     {
05698                     /*%%%*/
05699                         block_dup_check((yyvsp[(2) - (3)].node),(yyvsp[(3) - (3)].node));
05700                         (yyvsp[(3) - (3)].node)->nd_iter = NEW_FCALL((yyvsp[(1) - (3)].id), (yyvsp[(2) - (3)].node));
05701                         (yyval.node) = (yyvsp[(3) - (3)].node);
05702                         fixpos((yyval.node), (yyvsp[(2) - (3)].node));
05703                     /*%
05704                         $$ = dispatch2(command, $1, $2);
05705                         $$ = method_add_block($$, $3);
05706                     %*/
05707                     ;}
05708     break;
05709 
05710   case 59:
05711 
05712 /* Line 1464 of yacc.c  */
05713 #line 1351 "parse.y"
05714     {
05715                     /*%%%*/
05716                         (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
05717                         fixpos((yyval.node), (yyvsp[(1) - (4)].node));
05718                     /*%
05719                         $$ = dispatch4(command_call, $1, ripper_id2sym('.'), $3, $4);
05720                     %*/
05721                     ;}
05722     break;
05723 
05724   case 60:
05725 
05726 /* Line 1464 of yacc.c  */
05727 #line 1360 "parse.y"
05728     {
05729                     /*%%%*/
05730                         block_dup_check((yyvsp[(4) - (5)].node),(yyvsp[(5) - (5)].node));
05731                         (yyvsp[(5) - (5)].node)->nd_iter = NEW_CALL((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].node));
05732                         (yyval.node) = (yyvsp[(5) - (5)].node);
05733                         fixpos((yyval.node), (yyvsp[(1) - (5)].node));
05734                     /*%
05735                         $$ = dispatch4(command_call, $1, ripper_id2sym('.'), $3, $4);
05736                         $$ = method_add_block($$, $5);
05737                     %*/
05738                    ;}
05739     break;
05740 
05741   case 61:
05742 
05743 /* Line 1464 of yacc.c  */
05744 #line 1372 "parse.y"
05745     {
05746                     /*%%%*/
05747                         (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
05748                         fixpos((yyval.node), (yyvsp[(1) - (4)].node));
05749                     /*%
05750                         $$ = dispatch4(command_call, $1, ripper_intern("::"), $3, $4);
05751                     %*/
05752                     ;}
05753     break;
05754 
05755   case 62:
05756 
05757 /* Line 1464 of yacc.c  */
05758 #line 1381 "parse.y"
05759     {
05760                     /*%%%*/
05761                         block_dup_check((yyvsp[(4) - (5)].node),(yyvsp[(5) - (5)].node));
05762                         (yyvsp[(5) - (5)].node)->nd_iter = NEW_CALL((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].node));
05763                         (yyval.node) = (yyvsp[(5) - (5)].node);
05764                         fixpos((yyval.node), (yyvsp[(1) - (5)].node));
05765                     /*%
05766                         $$ = dispatch4(command_call, $1, ripper_intern("::"), $3, $4);
05767                         $$ = method_add_block($$, $5);
05768                     %*/
05769                    ;}
05770     break;
05771 
05772   case 63:
05773 
05774 /* Line 1464 of yacc.c  */
05775 #line 1393 "parse.y"
05776     {
05777                     /*%%%*/
05778                         (yyval.node) = NEW_SUPER((yyvsp[(2) - (2)].node));
05779                         fixpos((yyval.node), (yyvsp[(2) - (2)].node));
05780                     /*%
05781                         $$ = dispatch1(super, $2);
05782                     %*/
05783                     ;}
05784     break;
05785 
05786   case 64:
05787 
05788 /* Line 1464 of yacc.c  */
05789 #line 1402 "parse.y"
05790     {
05791                     /*%%%*/
05792                         (yyval.node) = new_yield((yyvsp[(2) - (2)].node));
05793                         fixpos((yyval.node), (yyvsp[(2) - (2)].node));
05794                     /*%
05795                         $$ = dispatch1(yield, $2);
05796                     %*/
05797                     ;}
05798     break;
05799 
05800   case 65:
05801 
05802 /* Line 1464 of yacc.c  */
05803 #line 1411 "parse.y"
05804     {
05805                     /*%%%*/
05806                         (yyval.node) = NEW_RETURN(ret_args((yyvsp[(2) - (2)].node)));
05807                     /*%
05808                         $$ = dispatch1(return, $2);
05809                     %*/
05810                     ;}
05811     break;
05812 
05813   case 66:
05814 
05815 /* Line 1464 of yacc.c  */
05816 #line 1419 "parse.y"
05817     {
05818                     /*%%%*/
05819                         (yyval.node) = NEW_BREAK(ret_args((yyvsp[(2) - (2)].node)));
05820                     /*%
05821                         $$ = dispatch1(break, $2);
05822                     %*/
05823                     ;}
05824     break;
05825 
05826   case 67:
05827 
05828 /* Line 1464 of yacc.c  */
05829 #line 1427 "parse.y"
05830     {
05831                     /*%%%*/
05832                         (yyval.node) = NEW_NEXT(ret_args((yyvsp[(2) - (2)].node)));
05833                     /*%
05834                         $$ = dispatch1(next, $2);
05835                     %*/
05836                     ;}
05837     break;
05838 
05839   case 69:
05840 
05841 /* Line 1464 of yacc.c  */
05842 #line 1438 "parse.y"
05843     {
05844                     /*%%%*/
05845                         (yyval.node) = (yyvsp[(2) - (3)].node);
05846                     /*%
05847                         $$ = dispatch1(mlhs_paren, $2);
05848                     %*/
05849                     ;}
05850     break;
05851 
05852   case 71:
05853 
05854 /* Line 1464 of yacc.c  */
05855 #line 1449 "parse.y"
05856     {
05857                     /*%%%*/
05858                         (yyval.node) = NEW_MASGN(NEW_LIST((yyvsp[(2) - (3)].node)), 0);
05859                     /*%
05860                         $$ = dispatch1(mlhs_paren, $2);
05861                     %*/
05862                     ;}
05863     break;
05864 
05865   case 72:
05866 
05867 /* Line 1464 of yacc.c  */
05868 #line 1459 "parse.y"
05869     {
05870                     /*%%%*/
05871                         (yyval.node) = NEW_MASGN((yyvsp[(1) - (1)].node), 0);
05872                     /*%
05873                         $$ = $1;
05874                     %*/
05875                     ;}
05876     break;
05877 
05878   case 73:
05879 
05880 /* Line 1464 of yacc.c  */
05881 #line 1467 "parse.y"
05882     {
05883                     /*%%%*/
05884                         (yyval.node) = NEW_MASGN(list_append((yyvsp[(1) - (2)].node),(yyvsp[(2) - (2)].node)), 0);
05885                     /*%
05886                         $$ = mlhs_add($1, $2);
05887                     %*/
05888                     ;}
05889     break;
05890 
05891   case 74:
05892 
05893 /* Line 1464 of yacc.c  */
05894 #line 1475 "parse.y"
05895     {
05896                     /*%%%*/
05897                         (yyval.node) = NEW_MASGN((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
05898                     /*%
05899                         $$ = mlhs_add_star($1, $3);
05900                     %*/
05901                     ;}
05902     break;
05903 
05904   case 75:
05905 
05906 /* Line 1464 of yacc.c  */
05907 #line 1483 "parse.y"
05908     {
05909                     /*%%%*/
05910                         (yyval.node) = NEW_MASGN((yyvsp[(1) - (5)].node), NEW_POSTARG((yyvsp[(3) - (5)].node),(yyvsp[(5) - (5)].node)));
05911                     /*%
05912                         $1 = mlhs_add_star($1, $3);
05913                         $$ = mlhs_add($1, $5);
05914                     %*/
05915                     ;}
05916     break;
05917 
05918   case 76:
05919 
05920 /* Line 1464 of yacc.c  */
05921 #line 1492 "parse.y"
05922     {
05923                     /*%%%*/
05924                         (yyval.node) = NEW_MASGN((yyvsp[(1) - (2)].node), -1);
05925                     /*%
05926                         $$ = mlhs_add_star($1, Qnil);
05927                     %*/
05928                     ;}
05929     break;
05930 
05931   case 77:
05932 
05933 /* Line 1464 of yacc.c  */
05934 #line 1500 "parse.y"
05935     {
05936                     /*%%%*/
05937                         (yyval.node) = NEW_MASGN((yyvsp[(1) - (4)].node), NEW_POSTARG(-1, (yyvsp[(4) - (4)].node)));
05938                     /*%
05939                         $$ = mlhs_add_star($1, Qnil);
05940                     %*/
05941                     ;}
05942     break;
05943 
05944   case 78:
05945 
05946 /* Line 1464 of yacc.c  */
05947 #line 1508 "parse.y"
05948     {
05949                     /*%%%*/
05950                         (yyval.node) = NEW_MASGN(0, (yyvsp[(2) - (2)].node));
05951                     /*%
05952                         $$ = mlhs_add_star(mlhs_new(), $2);
05953                     %*/
05954                     ;}
05955     break;
05956 
05957   case 79:
05958 
05959 /* Line 1464 of yacc.c  */
05960 #line 1516 "parse.y"
05961     {
05962                     /*%%%*/
05963                         (yyval.node) = NEW_MASGN(0, NEW_POSTARG((yyvsp[(2) - (4)].node),(yyvsp[(4) - (4)].node)));
05964                     /*%
05965                         $$ = mlhs_add_star(mlhs_new(), $2);
05966                     %*/
05967                     ;}
05968     break;
05969 
05970   case 80:
05971 
05972 /* Line 1464 of yacc.c  */
05973 #line 1524 "parse.y"
05974     {
05975                     /*%%%*/
05976                         (yyval.node) = NEW_MASGN(0, -1);
05977                     /*%
05978                         $$ = mlhs_add_star(mlhs_new(), Qnil);
05979                     %*/
05980                     ;}
05981     break;
05982 
05983   case 81:
05984 
05985 /* Line 1464 of yacc.c  */
05986 #line 1532 "parse.y"
05987     {
05988                     /*%%%*/
05989                         (yyval.node) = NEW_MASGN(0, NEW_POSTARG(-1, (yyvsp[(3) - (3)].node)));
05990                     /*%
05991                         $$ = mlhs_add_star(mlhs_new(), Qnil);
05992                     %*/
05993                     ;}
05994     break;
05995 
05996   case 83:
05997 
05998 /* Line 1464 of yacc.c  */
05999 #line 1543 "parse.y"
06000     {
06001                     /*%%%*/
06002                         (yyval.node) = (yyvsp[(2) - (3)].node);
06003                     /*%
06004                         $$ = dispatch1(mlhs_paren, $2);
06005                     %*/
06006                     ;}
06007     break;
06008 
06009   case 84:
06010 
06011 /* Line 1464 of yacc.c  */
06012 #line 1553 "parse.y"
06013     {
06014                     /*%%%*/
06015                         (yyval.node) = NEW_LIST((yyvsp[(1) - (2)].node));
06016                     /*%
06017                         $$ = mlhs_add(mlhs_new(), $1);
06018                     %*/
06019                     ;}
06020     break;
06021 
06022   case 85:
06023 
06024 /* Line 1464 of yacc.c  */
06025 #line 1561 "parse.y"
06026     {
06027                     /*%%%*/
06028                         (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].node));
06029                     /*%
06030                         $$ = mlhs_add($1, $2);
06031                     %*/
06032                     ;}
06033     break;
06034 
06035   case 86:
06036 
06037 /* Line 1464 of yacc.c  */
06038 #line 1571 "parse.y"
06039     {
06040                     /*%%%*/
06041                         (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
06042                     /*%
06043                         $$ = mlhs_add(mlhs_new(), $1);
06044                     %*/
06045                     ;}
06046     break;
06047 
06048   case 87:
06049 
06050 /* Line 1464 of yacc.c  */
06051 #line 1579 "parse.y"
06052     {
06053                     /*%%%*/
06054                         (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
06055                     /*%
06056                         $$ = mlhs_add($1, $3);
06057                     %*/
06058                     ;}
06059     break;
06060 
06061   case 88:
06062 
06063 /* Line 1464 of yacc.c  */
06064 #line 1589 "parse.y"
06065     {
06066                         (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
06067                     ;}
06068     break;
06069 
06070   case 89:
06071 
06072 /* Line 1464 of yacc.c  */
06073 #line 1593 "parse.y"
06074     {
06075                     /*%%%*/
06076                         (yyval.node) = aryset((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node));
06077                     /*%
06078                         $$ = dispatch2(aref_field, $1, escape_Qundef($3));
06079                     %*/
06080                     ;}
06081     break;
06082 
06083   case 90:
06084 
06085 /* Line 1464 of yacc.c  */
06086 #line 1601 "parse.y"
06087     {
06088                     /*%%%*/
06089                         (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06090                     /*%
06091                         $$ = dispatch3(field, $1, ripper_id2sym('.'), $3);
06092                     %*/
06093                     ;}
06094     break;
06095 
06096   case 91:
06097 
06098 /* Line 1464 of yacc.c  */
06099 #line 1609 "parse.y"
06100     {
06101                     /*%%%*/
06102                         (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06103                     /*%
06104                         $$ = dispatch2(const_path_field, $1, $3);
06105                     %*/
06106                     ;}
06107     break;
06108 
06109   case 92:
06110 
06111 /* Line 1464 of yacc.c  */
06112 #line 1617 "parse.y"
06113     {
06114                     /*%%%*/
06115                         (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06116                     /*%
06117                         $$ = dispatch3(field, $1, ripper_id2sym('.'), $3);
06118                     %*/
06119                     ;}
06120     break;
06121 
06122   case 93:
06123 
06124 /* Line 1464 of yacc.c  */
06125 #line 1625 "parse.y"
06126     {
06127                     /*%%%*/
06128                         if (in_def || in_single)
06129                             yyerror("dynamic constant assignment");
06130                         (yyval.node) = NEW_CDECL(0, 0, NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id)));
06131                     /*%
06132                         if (in_def || in_single)
06133                             yyerror("dynamic constant assignment");
06134                         $$ = dispatch2(const_path_field, $1, $3);
06135                     %*/
06136                     ;}
06137     break;
06138 
06139   case 94:
06140 
06141 /* Line 1464 of yacc.c  */
06142 #line 1637 "parse.y"
06143     {
06144                     /*%%%*/
06145                         if (in_def || in_single)
06146                             yyerror("dynamic constant assignment");
06147                         (yyval.node) = NEW_CDECL(0, 0, NEW_COLON3((yyvsp[(2) - (2)].id)));
06148                     /*%
06149                         $$ = dispatch1(top_const_field, $2);
06150                     %*/
06151                     ;}
06152     break;
06153 
06154   case 95:
06155 
06156 /* Line 1464 of yacc.c  */
06157 #line 1647 "parse.y"
06158     {
06159                     /*%%%*/
06160                         rb_backref_error((yyvsp[(1) - (1)].node));
06161                         (yyval.node) = NEW_BEGIN(0);
06162                     /*%
06163                         $$ = dispatch1(var_field, $1);
06164                         $$ = dispatch1(assign_error, $$);
06165                     %*/
06166                     ;}
06167     break;
06168 
06169   case 96:
06170 
06171 /* Line 1464 of yacc.c  */
06172 #line 1659 "parse.y"
06173     {
06174                         (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
06175                     /*%%%*/
06176                         if (!(yyval.node)) (yyval.node) = NEW_BEGIN(0);
06177                     /*%
06178                         $$ = dispatch1(var_field, $$);
06179                     %*/
06180                     ;}
06181     break;
06182 
06183   case 97:
06184 
06185 /* Line 1464 of yacc.c  */
06186 #line 1668 "parse.y"
06187     {
06188                     /*%%%*/
06189                         (yyval.node) = aryset((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node));
06190                     /*%
06191                         $$ = dispatch2(aref_field, $1, escape_Qundef($3));
06192                     %*/
06193                     ;}
06194     break;
06195 
06196   case 98:
06197 
06198 /* Line 1464 of yacc.c  */
06199 #line 1676 "parse.y"
06200     {
06201                     /*%%%*/
06202                         (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06203                     /*%
06204                         $$ = dispatch3(field, $1, ripper_id2sym('.'), $3);
06205                     %*/
06206                     ;}
06207     break;
06208 
06209   case 99:
06210 
06211 /* Line 1464 of yacc.c  */
06212 #line 1684 "parse.y"
06213     {
06214                     /*%%%*/
06215                         (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06216                     /*%
06217                         $$ = dispatch3(field, $1, ripper_intern("::"), $3);
06218                     %*/
06219                     ;}
06220     break;
06221 
06222   case 100:
06223 
06224 /* Line 1464 of yacc.c  */
06225 #line 1692 "parse.y"
06226     {
06227                     /*%%%*/
06228                         (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06229                     /*%
06230                         $$ = dispatch3(field, $1, ripper_id2sym('.'), $3);
06231                     %*/
06232                     ;}
06233     break;
06234 
06235   case 101:
06236 
06237 /* Line 1464 of yacc.c  */
06238 #line 1700 "parse.y"
06239     {
06240                     /*%%%*/
06241                         if (in_def || in_single)
06242                             yyerror("dynamic constant assignment");
06243                         (yyval.node) = NEW_CDECL(0, 0, NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id)));
06244                     /*%
06245                         $$ = dispatch2(const_path_field, $1, $3);
06246                         if (in_def || in_single) {
06247                             $$ = dispatch1(assign_error, $$);
06248                         }
06249                     %*/
06250                     ;}
06251     break;
06252 
06253   case 102:
06254 
06255 /* Line 1464 of yacc.c  */
06256 #line 1713 "parse.y"
06257     {
06258                     /*%%%*/
06259                         if (in_def || in_single)
06260                             yyerror("dynamic constant assignment");
06261                         (yyval.node) = NEW_CDECL(0, 0, NEW_COLON3((yyvsp[(2) - (2)].id)));
06262                     /*%
06263                         $$ = dispatch1(top_const_field, $2);
06264                         if (in_def || in_single) {
06265                             $$ = dispatch1(assign_error, $$);
06266                         }
06267                     %*/
06268                     ;}
06269     break;
06270 
06271   case 103:
06272 
06273 /* Line 1464 of yacc.c  */
06274 #line 1726 "parse.y"
06275     {
06276                     /*%%%*/
06277                         rb_backref_error((yyvsp[(1) - (1)].node));
06278                         (yyval.node) = NEW_BEGIN(0);
06279                     /*%
06280                         $$ = dispatch1(assign_error, $1);
06281                     %*/
06282                     ;}
06283     break;
06284 
06285   case 104:
06286 
06287 /* Line 1464 of yacc.c  */
06288 #line 1737 "parse.y"
06289     {
06290                     /*%%%*/
06291                         yyerror("class/module name must be CONSTANT");
06292                     /*%
06293                         $$ = dispatch1(class_name_error, $1);
06294                     %*/
06295                     ;}
06296     break;
06297 
06298   case 106:
06299 
06300 /* Line 1464 of yacc.c  */
06301 #line 1748 "parse.y"
06302     {
06303                     /*%%%*/
06304                         (yyval.node) = NEW_COLON3((yyvsp[(2) - (2)].id));
06305                     /*%
06306                         $$ = dispatch1(top_const_ref, $2);
06307                     %*/
06308                     ;}
06309     break;
06310 
06311   case 107:
06312 
06313 /* Line 1464 of yacc.c  */
06314 #line 1756 "parse.y"
06315     {
06316                     /*%%%*/
06317                         (yyval.node) = NEW_COLON2(0, (yyval.node));
06318                     /*%
06319                         $$ = dispatch1(const_ref, $1);
06320                     %*/
06321                     ;}
06322     break;
06323 
06324   case 108:
06325 
06326 /* Line 1464 of yacc.c  */
06327 #line 1764 "parse.y"
06328     {
06329                     /*%%%*/
06330                         (yyval.node) = NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06331                     /*%
06332                         $$ = dispatch2(const_path_ref, $1, $3);
06333                     %*/
06334                     ;}
06335     break;
06336 
06337   case 112:
06338 
06339 /* Line 1464 of yacc.c  */
06340 #line 1777 "parse.y"
06341     {
06342                         lex_state = EXPR_ENDFN;
06343                         (yyval.id) = (yyvsp[(1) - (1)].id);
06344                     ;}
06345     break;
06346 
06347   case 113:
06348 
06349 /* Line 1464 of yacc.c  */
06350 #line 1782 "parse.y"
06351     {
06352                         lex_state = EXPR_ENDFN;
06353                     /*%%%*/
06354                         (yyval.id) = (yyvsp[(1) - (1)].id);
06355                     /*%
06356                         $$ = $1;
06357                     %*/
06358                     ;}
06359     break;
06360 
06361   case 116:
06362 
06363 /* Line 1464 of yacc.c  */
06364 #line 1797 "parse.y"
06365     {
06366                     /*%%%*/
06367                         (yyval.node) = NEW_LIT(ID2SYM((yyvsp[(1) - (1)].id)));
06368                     /*%
06369                         $$ = dispatch1(symbol_literal, $1);
06370                     %*/
06371                     ;}
06372     break;
06373 
06374   case 118:
06375 
06376 /* Line 1464 of yacc.c  */
06377 #line 1808 "parse.y"
06378     {
06379                     /*%%%*/
06380                         (yyval.node) = NEW_UNDEF((yyvsp[(1) - (1)].node));
06381                     /*%
06382                         $$ = rb_ary_new3(1, $1);
06383                     %*/
06384                     ;}
06385     break;
06386 
06387   case 119:
06388 
06389 /* Line 1464 of yacc.c  */
06390 #line 1815 "parse.y"
06391     {lex_state = EXPR_FNAME;;}
06392     break;
06393 
06394   case 120:
06395 
06396 /* Line 1464 of yacc.c  */
06397 #line 1816 "parse.y"
06398     {
06399                     /*%%%*/
06400                         (yyval.node) = block_append((yyvsp[(1) - (4)].node), NEW_UNDEF((yyvsp[(4) - (4)].node)));
06401                     /*%
06402                         rb_ary_push($1, $4);
06403                     %*/
06404                     ;}
06405     break;
06406 
06407   case 121:
06408 
06409 /* Line 1464 of yacc.c  */
06410 #line 1825 "parse.y"
06411     { ifndef_ripper((yyval.id) = '|'); ;}
06412     break;
06413 
06414   case 122:
06415 
06416 /* Line 1464 of yacc.c  */
06417 #line 1826 "parse.y"
06418     { ifndef_ripper((yyval.id) = '^'); ;}
06419     break;
06420 
06421   case 123:
06422 
06423 /* Line 1464 of yacc.c  */
06424 #line 1827 "parse.y"
06425     { ifndef_ripper((yyval.id) = '&'); ;}
06426     break;
06427 
06428   case 124:
06429 
06430 /* Line 1464 of yacc.c  */
06431 #line 1828 "parse.y"
06432     { ifndef_ripper((yyval.id) = tCMP); ;}
06433     break;
06434 
06435   case 125:
06436 
06437 /* Line 1464 of yacc.c  */
06438 #line 1829 "parse.y"
06439     { ifndef_ripper((yyval.id) = tEQ); ;}
06440     break;
06441 
06442   case 126:
06443 
06444 /* Line 1464 of yacc.c  */
06445 #line 1830 "parse.y"
06446     { ifndef_ripper((yyval.id) = tEQQ); ;}
06447     break;
06448 
06449   case 127:
06450 
06451 /* Line 1464 of yacc.c  */
06452 #line 1831 "parse.y"
06453     { ifndef_ripper((yyval.id) = tMATCH); ;}
06454     break;
06455 
06456   case 128:
06457 
06458 /* Line 1464 of yacc.c  */
06459 #line 1832 "parse.y"
06460     { ifndef_ripper((yyval.id) = tNMATCH); ;}
06461     break;
06462 
06463   case 129:
06464 
06465 /* Line 1464 of yacc.c  */
06466 #line 1833 "parse.y"
06467     { ifndef_ripper((yyval.id) = '>'); ;}
06468     break;
06469 
06470   case 130:
06471 
06472 /* Line 1464 of yacc.c  */
06473 #line 1834 "parse.y"
06474     { ifndef_ripper((yyval.id) = tGEQ); ;}
06475     break;
06476 
06477   case 131:
06478 
06479 /* Line 1464 of yacc.c  */
06480 #line 1835 "parse.y"
06481     { ifndef_ripper((yyval.id) = '<'); ;}
06482     break;
06483 
06484   case 132:
06485 
06486 /* Line 1464 of yacc.c  */
06487 #line 1836 "parse.y"
06488     { ifndef_ripper((yyval.id) = tLEQ); ;}
06489     break;
06490 
06491   case 133:
06492 
06493 /* Line 1464 of yacc.c  */
06494 #line 1837 "parse.y"
06495     { ifndef_ripper((yyval.id) = tNEQ); ;}
06496     break;
06497 
06498   case 134:
06499 
06500 /* Line 1464 of yacc.c  */
06501 #line 1838 "parse.y"
06502     { ifndef_ripper((yyval.id) = tLSHFT); ;}
06503     break;
06504 
06505   case 135:
06506 
06507 /* Line 1464 of yacc.c  */
06508 #line 1839 "parse.y"
06509     { ifndef_ripper((yyval.id) = tRSHFT); ;}
06510     break;
06511 
06512   case 136:
06513 
06514 /* Line 1464 of yacc.c  */
06515 #line 1840 "parse.y"
06516     { ifndef_ripper((yyval.id) = '+'); ;}
06517     break;
06518 
06519   case 137:
06520 
06521 /* Line 1464 of yacc.c  */
06522 #line 1841 "parse.y"
06523     { ifndef_ripper((yyval.id) = '-'); ;}
06524     break;
06525 
06526   case 138:
06527 
06528 /* Line 1464 of yacc.c  */
06529 #line 1842 "parse.y"
06530     { ifndef_ripper((yyval.id) = '*'); ;}
06531     break;
06532 
06533   case 139:
06534 
06535 /* Line 1464 of yacc.c  */
06536 #line 1843 "parse.y"
06537     { ifndef_ripper((yyval.id) = '*'); ;}
06538     break;
06539 
06540   case 140:
06541 
06542 /* Line 1464 of yacc.c  */
06543 #line 1844 "parse.y"
06544     { ifndef_ripper((yyval.id) = '/'); ;}
06545     break;
06546 
06547   case 141:
06548 
06549 /* Line 1464 of yacc.c  */
06550 #line 1845 "parse.y"
06551     { ifndef_ripper((yyval.id) = '%'); ;}
06552     break;
06553 
06554   case 142:
06555 
06556 /* Line 1464 of yacc.c  */
06557 #line 1846 "parse.y"
06558     { ifndef_ripper((yyval.id) = tPOW); ;}
06559     break;
06560 
06561   case 143:
06562 
06563 /* Line 1464 of yacc.c  */
06564 #line 1847 "parse.y"
06565     { ifndef_ripper((yyval.id) = '!'); ;}
06566     break;
06567 
06568   case 144:
06569 
06570 /* Line 1464 of yacc.c  */
06571 #line 1848 "parse.y"
06572     { ifndef_ripper((yyval.id) = '~'); ;}
06573     break;
06574 
06575   case 145:
06576 
06577 /* Line 1464 of yacc.c  */
06578 #line 1849 "parse.y"
06579     { ifndef_ripper((yyval.id) = tUPLUS); ;}
06580     break;
06581 
06582   case 146:
06583 
06584 /* Line 1464 of yacc.c  */
06585 #line 1850 "parse.y"
06586     { ifndef_ripper((yyval.id) = tUMINUS); ;}
06587     break;
06588 
06589   case 147:
06590 
06591 /* Line 1464 of yacc.c  */
06592 #line 1851 "parse.y"
06593     { ifndef_ripper((yyval.id) = tAREF); ;}
06594     break;
06595 
06596   case 148:
06597 
06598 /* Line 1464 of yacc.c  */
06599 #line 1852 "parse.y"
06600     { ifndef_ripper((yyval.id) = tASET); ;}
06601     break;
06602 
06603   case 149:
06604 
06605 /* Line 1464 of yacc.c  */
06606 #line 1853 "parse.y"
06607     { ifndef_ripper((yyval.id) = '`'); ;}
06608     break;
06609 
06610   case 191:
06611 
06612 /* Line 1464 of yacc.c  */
06613 #line 1871 "parse.y"
06614     {
06615                     /*%%%*/
06616                         value_expr((yyvsp[(3) - (3)].node));
06617                         (yyval.node) = node_assign((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
06618                     /*%
06619                         $$ = dispatch2(assign, $1, $3);
06620                     %*/
06621                     ;}
06622     break;
06623 
06624   case 192:
06625 
06626 /* Line 1464 of yacc.c  */
06627 #line 1880 "parse.y"
06628     {
06629                     /*%%%*/
06630                         value_expr((yyvsp[(3) - (5)].node));
06631                         (yyvsp[(3) - (5)].node) = NEW_RESCUE((yyvsp[(3) - (5)].node), NEW_RESBODY(0,(yyvsp[(5) - (5)].node),0), 0);
06632                         (yyval.node) = node_assign((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].node));
06633                     /*%
06634                         $$ = dispatch2(assign, $1, dispatch2(rescue_mod, $3, $5));
06635                     %*/
06636                     ;}
06637     break;
06638 
06639   case 193:
06640 
06641 /* Line 1464 of yacc.c  */
06642 #line 1890 "parse.y"
06643     {
06644                     /*%%%*/
06645                         value_expr((yyvsp[(3) - (3)].node));
06646                         if ((yyvsp[(1) - (3)].node)) {
06647                             ID vid = (yyvsp[(1) - (3)].node)->nd_vid;
06648                             if ((yyvsp[(2) - (3)].id) == tOROP) {
06649                                 (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
06650                                 (yyval.node) = NEW_OP_ASGN_OR(gettable(vid), (yyvsp[(1) - (3)].node));
06651                                 if (is_asgn_or_id(vid)) {
06652                                     (yyval.node)->nd_aid = vid;
06653                                 }
06654                             }
06655                             else if ((yyvsp[(2) - (3)].id) == tANDOP) {
06656                                 (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
06657                                 (yyval.node) = NEW_OP_ASGN_AND(gettable(vid), (yyvsp[(1) - (3)].node));
06658                             }
06659                             else {
06660                                 (yyval.node) = (yyvsp[(1) - (3)].node);
06661                                 (yyval.node)->nd_value = NEW_CALL(gettable(vid), (yyvsp[(2) - (3)].id), NEW_LIST((yyvsp[(3) - (3)].node)));
06662                             }
06663                         }
06664                         else {
06665                             (yyval.node) = NEW_BEGIN(0);
06666                         }
06667                     /*%
06668                         $$ = dispatch3(opassign, $1, $2, $3);
06669                     %*/
06670                     ;}
06671     break;
06672 
06673   case 194:
06674 
06675 /* Line 1464 of yacc.c  */
06676 #line 1919 "parse.y"
06677     {
06678                     /*%%%*/
06679                         value_expr((yyvsp[(3) - (5)].node));
06680                         (yyvsp[(3) - (5)].node) = NEW_RESCUE((yyvsp[(3) - (5)].node), NEW_RESBODY(0,(yyvsp[(5) - (5)].node),0), 0);
06681                         if ((yyvsp[(1) - (5)].node)) {
06682                             ID vid = (yyvsp[(1) - (5)].node)->nd_vid;
06683                             if ((yyvsp[(2) - (5)].id) == tOROP) {
06684                                 (yyvsp[(1) - (5)].node)->nd_value = (yyvsp[(3) - (5)].node);
06685                                 (yyval.node) = NEW_OP_ASGN_OR(gettable(vid), (yyvsp[(1) - (5)].node));
06686                                 if (is_asgn_or_id(vid)) {
06687                                     (yyval.node)->nd_aid = vid;
06688                                 }
06689                             }
06690                             else if ((yyvsp[(2) - (5)].id) == tANDOP) {
06691                                 (yyvsp[(1) - (5)].node)->nd_value = (yyvsp[(3) - (5)].node);
06692                                 (yyval.node) = NEW_OP_ASGN_AND(gettable(vid), (yyvsp[(1) - (5)].node));
06693                             }
06694                             else {
06695                                 (yyval.node) = (yyvsp[(1) - (5)].node);
06696                                 (yyval.node)->nd_value = NEW_CALL(gettable(vid), (yyvsp[(2) - (5)].id), NEW_LIST((yyvsp[(3) - (5)].node)));
06697                             }
06698                         }
06699                         else {
06700                             (yyval.node) = NEW_BEGIN(0);
06701                         }
06702                     /*%
06703                         $3 = dispatch2(rescue_mod, $3, $5);
06704                         $$ = dispatch3(opassign, $1, $2, $3);
06705                     %*/
06706                     ;}
06707     break;
06708 
06709   case 195:
06710 
06711 /* Line 1464 of yacc.c  */
06712 #line 1950 "parse.y"
06713     {
06714                     /*%%%*/
06715                         NODE *args;
06716 
06717                         value_expr((yyvsp[(6) - (6)].node));
06718                         if (!(yyvsp[(3) - (6)].node)) (yyvsp[(3) - (6)].node) = NEW_ZARRAY();
06719                         if (nd_type((yyvsp[(3) - (6)].node)) == NODE_BLOCK_PASS) {
06720                             args = NEW_ARGSCAT((yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node));
06721                         }
06722                         else {
06723                             args = arg_concat((yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node));
06724                         }
06725                         if ((yyvsp[(5) - (6)].id) == tOROP) {
06726                             (yyvsp[(5) - (6)].id) = 0;
06727                         }
06728                         else if ((yyvsp[(5) - (6)].id) == tANDOP) {
06729                             (yyvsp[(5) - (6)].id) = 1;
06730                         }
06731                         (yyval.node) = NEW_OP_ASGN1((yyvsp[(1) - (6)].node), (yyvsp[(5) - (6)].id), args);
06732                         fixpos((yyval.node), (yyvsp[(1) - (6)].node));
06733                     /*%
06734                         $1 = dispatch2(aref_field, $1, escape_Qundef($3));
06735                         $$ = dispatch3(opassign, $1, $5, $6);
06736                     %*/
06737                     ;}
06738     break;
06739 
06740   case 196:
06741 
06742 /* Line 1464 of yacc.c  */
06743 #line 1976 "parse.y"
06744     {
06745                     /*%%%*/
06746                         value_expr((yyvsp[(5) - (5)].node));
06747                         if ((yyvsp[(4) - (5)].id) == tOROP) {
06748                             (yyvsp[(4) - (5)].id) = 0;
06749                         }
06750                         else if ((yyvsp[(4) - (5)].id) == tANDOP) {
06751                             (yyvsp[(4) - (5)].id) = 1;
06752                         }
06753                         (yyval.node) = NEW_OP_ASGN2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
06754                         fixpos((yyval.node), (yyvsp[(1) - (5)].node));
06755                     /*%
06756                         $1 = dispatch3(field, $1, ripper_id2sym('.'), $3);
06757                         $$ = dispatch3(opassign, $1, $4, $5);
06758                     %*/
06759                     ;}
06760     break;
06761 
06762   case 197:
06763 
06764 /* Line 1464 of yacc.c  */
06765 #line 1993 "parse.y"
06766     {
06767                     /*%%%*/
06768                         value_expr((yyvsp[(5) - (5)].node));
06769                         if ((yyvsp[(4) - (5)].id) == tOROP) {
06770                             (yyvsp[(4) - (5)].id) = 0;
06771                         }
06772                         else if ((yyvsp[(4) - (5)].id) == tANDOP) {
06773                             (yyvsp[(4) - (5)].id) = 1;
06774                         }
06775                         (yyval.node) = NEW_OP_ASGN2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
06776                         fixpos((yyval.node), (yyvsp[(1) - (5)].node));
06777                     /*%
06778                         $1 = dispatch3(field, $1, ripper_id2sym('.'), $3);
06779                         $$ = dispatch3(opassign, $1, $4, $5);
06780                     %*/
06781                     ;}
06782     break;
06783 
06784   case 198:
06785 
06786 /* Line 1464 of yacc.c  */
06787 #line 2010 "parse.y"
06788     {
06789                     /*%%%*/
06790                         value_expr((yyvsp[(5) - (5)].node));
06791                         if ((yyvsp[(4) - (5)].id) == tOROP) {
06792                             (yyvsp[(4) - (5)].id) = 0;
06793                         }
06794                         else if ((yyvsp[(4) - (5)].id) == tANDOP) {
06795                             (yyvsp[(4) - (5)].id) = 1;
06796                         }
06797                         (yyval.node) = NEW_OP_ASGN2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
06798                         fixpos((yyval.node), (yyvsp[(1) - (5)].node));
06799                     /*%
06800                         $1 = dispatch3(field, $1, ripper_intern("::"), $3);
06801                         $$ = dispatch3(opassign, $1, $4, $5);
06802                     %*/
06803                     ;}
06804     break;
06805 
06806   case 199:
06807 
06808 /* Line 1464 of yacc.c  */
06809 #line 2027 "parse.y"
06810     {
06811                     /*%%%*/
06812                         yyerror("constant re-assignment");
06813                         (yyval.node) = NEW_BEGIN(0);
06814                     /*%
06815                         $$ = dispatch2(const_path_field, $1, $3);
06816                         $$ = dispatch3(opassign, $$, $4, $5);
06817                         $$ = dispatch1(assign_error, $$);
06818                     %*/
06819                     ;}
06820     break;
06821 
06822   case 200:
06823 
06824 /* Line 1464 of yacc.c  */
06825 #line 2038 "parse.y"
06826     {
06827                     /*%%%*/
06828                         yyerror("constant re-assignment");
06829                         (yyval.node) = NEW_BEGIN(0);
06830                     /*%
06831                         $$ = dispatch1(top_const_field, $2);
06832                         $$ = dispatch3(opassign, $$, $3, $4);
06833                         $$ = dispatch1(assign_error, $$);
06834                     %*/
06835                     ;}
06836     break;
06837 
06838   case 201:
06839 
06840 /* Line 1464 of yacc.c  */
06841 #line 2049 "parse.y"
06842     {
06843                     /*%%%*/
06844                         rb_backref_error((yyvsp[(1) - (3)].node));
06845                         (yyval.node) = NEW_BEGIN(0);
06846                     /*%
06847                         $$ = dispatch1(var_field, $1);
06848                         $$ = dispatch3(opassign, $$, $2, $3);
06849                         $$ = dispatch1(assign_error, $$);
06850                     %*/
06851                     ;}
06852     break;
06853 
06854   case 202:
06855 
06856 /* Line 1464 of yacc.c  */
06857 #line 2060 "parse.y"
06858     {
06859                     /*%%%*/
06860                         value_expr((yyvsp[(1) - (3)].node));
06861                         value_expr((yyvsp[(3) - (3)].node));
06862                         (yyval.node) = NEW_DOT2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
06863                         if (nd_type((yyvsp[(1) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(1) - (3)].node)->nd_lit) &&
06864                             nd_type((yyvsp[(3) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(3) - (3)].node)->nd_lit)) {
06865                             deferred_nodes = list_append(deferred_nodes, (yyval.node));
06866                         }
06867                     /*%
06868                         $$ = dispatch2(dot2, $1, $3);
06869                     %*/
06870                     ;}
06871     break;
06872 
06873   case 203:
06874 
06875 /* Line 1464 of yacc.c  */
06876 #line 2074 "parse.y"
06877     {
06878                     /*%%%*/
06879                         value_expr((yyvsp[(1) - (3)].node));
06880                         value_expr((yyvsp[(3) - (3)].node));
06881                         (yyval.node) = NEW_DOT3((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
06882                         if (nd_type((yyvsp[(1) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(1) - (3)].node)->nd_lit) &&
06883                             nd_type((yyvsp[(3) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(3) - (3)].node)->nd_lit)) {
06884                             deferred_nodes = list_append(deferred_nodes, (yyval.node));
06885                         }
06886                     /*%
06887                         $$ = dispatch2(dot3, $1, $3);
06888                     %*/
06889                     ;}
06890     break;
06891 
06892   case 204:
06893 
06894 /* Line 1464 of yacc.c  */
06895 #line 2088 "parse.y"
06896     {
06897                     /*%%%*/
06898                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '+', (yyvsp[(3) - (3)].node));
06899                     /*%
06900                         $$ = dispatch3(binary, $1, ID2SYM('+'), $3);
06901                     %*/
06902                     ;}
06903     break;
06904 
06905   case 205:
06906 
06907 /* Line 1464 of yacc.c  */
06908 #line 2096 "parse.y"
06909     {
06910                     /*%%%*/
06911                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '-', (yyvsp[(3) - (3)].node));
06912                     /*%
06913                         $$ = dispatch3(binary, $1, ID2SYM('-'), $3);
06914                     %*/
06915                     ;}
06916     break;
06917 
06918   case 206:
06919 
06920 /* Line 1464 of yacc.c  */
06921 #line 2104 "parse.y"
06922     {
06923                     /*%%%*/
06924                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '*', (yyvsp[(3) - (3)].node));
06925                     /*%
06926                         $$ = dispatch3(binary, $1, ID2SYM('*'), $3);
06927                     %*/
06928                     ;}
06929     break;
06930 
06931   case 207:
06932 
06933 /* Line 1464 of yacc.c  */
06934 #line 2112 "parse.y"
06935     {
06936                     /*%%%*/
06937                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '/', (yyvsp[(3) - (3)].node));
06938                     /*%
06939                         $$ = dispatch3(binary, $1, ID2SYM('/'), $3);
06940                     %*/
06941                     ;}
06942     break;
06943 
06944   case 208:
06945 
06946 /* Line 1464 of yacc.c  */
06947 #line 2120 "parse.y"
06948     {
06949                     /*%%%*/
06950                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '%', (yyvsp[(3) - (3)].node));
06951                     /*%
06952                         $$ = dispatch3(binary, $1, ID2SYM('%'), $3);
06953                     %*/
06954                     ;}
06955     break;
06956 
06957   case 209:
06958 
06959 /* Line 1464 of yacc.c  */
06960 #line 2128 "parse.y"
06961     {
06962                     /*%%%*/
06963                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tPOW, (yyvsp[(3) - (3)].node));
06964                     /*%
06965                         $$ = dispatch3(binary, $1, ripper_intern("**"), $3);
06966                     %*/
06967                     ;}
06968     break;
06969 
06970   case 210:
06971 
06972 /* Line 1464 of yacc.c  */
06973 #line 2136 "parse.y"
06974     {
06975                     /*%%%*/
06976                         (yyval.node) = NEW_CALL(call_bin_op((yyvsp[(2) - (4)].node), tPOW, (yyvsp[(4) - (4)].node)), tUMINUS, 0);
06977                     /*%
06978                         $$ = dispatch3(binary, $2, ripper_intern("**"), $4);
06979                         $$ = dispatch2(unary, ripper_intern("-@"), $$);
06980                     %*/
06981                     ;}
06982     break;
06983 
06984   case 211:
06985 
06986 /* Line 1464 of yacc.c  */
06987 #line 2145 "parse.y"
06988     {
06989                     /*%%%*/
06990                         (yyval.node) = NEW_CALL(call_bin_op((yyvsp[(2) - (4)].node), tPOW, (yyvsp[(4) - (4)].node)), tUMINUS, 0);
06991                     /*%
06992                         $$ = dispatch3(binary, $2, ripper_intern("**"), $4);
06993                         $$ = dispatch2(unary, ripper_intern("-@"), $$);
06994                     %*/
06995                     ;}
06996     break;
06997 
06998   case 212:
06999 
07000 /* Line 1464 of yacc.c  */
07001 #line 2154 "parse.y"
07002     {
07003                     /*%%%*/
07004                         (yyval.node) = call_uni_op((yyvsp[(2) - (2)].node), tUPLUS);
07005                     /*%
07006                         $$ = dispatch2(unary, ripper_intern("+@"), $2);
07007                     %*/
07008                     ;}
07009     break;
07010 
07011   case 213:
07012 
07013 /* Line 1464 of yacc.c  */
07014 #line 2162 "parse.y"
07015     {
07016                     /*%%%*/
07017                         (yyval.node) = call_uni_op((yyvsp[(2) - (2)].node), tUMINUS);
07018                     /*%
07019                         $$ = dispatch2(unary, ripper_intern("-@"), $2);
07020                     %*/
07021                     ;}
07022     break;
07023 
07024   case 214:
07025 
07026 /* Line 1464 of yacc.c  */
07027 #line 2170 "parse.y"
07028     {
07029                     /*%%%*/
07030                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '|', (yyvsp[(3) - (3)].node));
07031                     /*%
07032                         $$ = dispatch3(binary, $1, ID2SYM('|'), $3);
07033                     %*/
07034                     ;}
07035     break;
07036 
07037   case 215:
07038 
07039 /* Line 1464 of yacc.c  */
07040 #line 2178 "parse.y"
07041     {
07042                     /*%%%*/
07043                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '^', (yyvsp[(3) - (3)].node));
07044                     /*%
07045                         $$ = dispatch3(binary, $1, ID2SYM('^'), $3);
07046                     %*/
07047                     ;}
07048     break;
07049 
07050   case 216:
07051 
07052 /* Line 1464 of yacc.c  */
07053 #line 2186 "parse.y"
07054     {
07055                     /*%%%*/
07056                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '&', (yyvsp[(3) - (3)].node));
07057                     /*%
07058                         $$ = dispatch3(binary, $1, ID2SYM('&'), $3);
07059                     %*/
07060                     ;}
07061     break;
07062 
07063   case 217:
07064 
07065 /* Line 1464 of yacc.c  */
07066 #line 2194 "parse.y"
07067     {
07068                     /*%%%*/
07069                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tCMP, (yyvsp[(3) - (3)].node));
07070                     /*%
07071                         $$ = dispatch3(binary, $1, ripper_intern("<=>"), $3);
07072                     %*/
07073                     ;}
07074     break;
07075 
07076   case 218:
07077 
07078 /* Line 1464 of yacc.c  */
07079 #line 2202 "parse.y"
07080     {
07081                     /*%%%*/
07082                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '>', (yyvsp[(3) - (3)].node));
07083                     /*%
07084                         $$ = dispatch3(binary, $1, ID2SYM('>'), $3);
07085                     %*/
07086                     ;}
07087     break;
07088 
07089   case 219:
07090 
07091 /* Line 1464 of yacc.c  */
07092 #line 2210 "parse.y"
07093     {
07094                     /*%%%*/
07095                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tGEQ, (yyvsp[(3) - (3)].node));
07096                     /*%
07097                         $$ = dispatch3(binary, $1, ripper_intern(">="), $3);
07098                     %*/
07099                     ;}
07100     break;
07101 
07102   case 220:
07103 
07104 /* Line 1464 of yacc.c  */
07105 #line 2218 "parse.y"
07106     {
07107                     /*%%%*/
07108                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '<', (yyvsp[(3) - (3)].node));
07109                     /*%
07110                         $$ = dispatch3(binary, $1, ID2SYM('<'), $3);
07111                     %*/
07112                     ;}
07113     break;
07114 
07115   case 221:
07116 
07117 /* Line 1464 of yacc.c  */
07118 #line 2226 "parse.y"
07119     {
07120                     /*%%%*/
07121                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tLEQ, (yyvsp[(3) - (3)].node));
07122                     /*%
07123                         $$ = dispatch3(binary, $1, ripper_intern("<="), $3);
07124                     %*/
07125                     ;}
07126     break;
07127 
07128   case 222:
07129 
07130 /* Line 1464 of yacc.c  */
07131 #line 2234 "parse.y"
07132     {
07133                     /*%%%*/
07134                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tEQ, (yyvsp[(3) - (3)].node));
07135                     /*%
07136                         $$ = dispatch3(binary, $1, ripper_intern("=="), $3);
07137                     %*/
07138                     ;}
07139     break;
07140 
07141   case 223:
07142 
07143 /* Line 1464 of yacc.c  */
07144 #line 2242 "parse.y"
07145     {
07146                     /*%%%*/
07147                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tEQQ, (yyvsp[(3) - (3)].node));
07148                     /*%
07149                         $$ = dispatch3(binary, $1, ripper_intern("==="), $3);
07150                     %*/
07151                     ;}
07152     break;
07153 
07154   case 224:
07155 
07156 /* Line 1464 of yacc.c  */
07157 #line 2250 "parse.y"
07158     {
07159                     /*%%%*/
07160                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tNEQ, (yyvsp[(3) - (3)].node));
07161                     /*%
07162                         $$ = dispatch3(binary, $1, ripper_intern("!="), $3);
07163                     %*/
07164                     ;}
07165     break;
07166 
07167   case 225:
07168 
07169 /* Line 1464 of yacc.c  */
07170 #line 2258 "parse.y"
07171     {
07172                     /*%%%*/
07173                         (yyval.node) = match_op((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
07174                         if (nd_type((yyvsp[(1) - (3)].node)) == NODE_LIT && TYPE((yyvsp[(1) - (3)].node)->nd_lit) == T_REGEXP) {
07175                             (yyval.node) = reg_named_capture_assign((yyvsp[(1) - (3)].node)->nd_lit, (yyval.node));
07176                         }
07177                     /*%
07178                         $$ = dispatch3(binary, $1, ripper_intern("=~"), $3);
07179                     %*/
07180                     ;}
07181     break;
07182 
07183   case 226:
07184 
07185 /* Line 1464 of yacc.c  */
07186 #line 2269 "parse.y"
07187     {
07188                     /*%%%*/
07189                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tNMATCH, (yyvsp[(3) - (3)].node));
07190                     /*%
07191                         $$ = dispatch3(binary, $1, ripper_intern("!~"), $3);
07192                     %*/
07193                     ;}
07194     break;
07195 
07196   case 227:
07197 
07198 /* Line 1464 of yacc.c  */
07199 #line 2277 "parse.y"
07200     {
07201                     /*%%%*/
07202                         (yyval.node) = call_uni_op(cond((yyvsp[(2) - (2)].node)), '!');
07203                     /*%
07204                         $$ = dispatch2(unary, ID2SYM('!'), $2);
07205                     %*/
07206                     ;}
07207     break;
07208 
07209   case 228:
07210 
07211 /* Line 1464 of yacc.c  */
07212 #line 2285 "parse.y"
07213     {
07214                     /*%%%*/
07215                         (yyval.node) = call_uni_op((yyvsp[(2) - (2)].node), '~');
07216                     /*%
07217                         $$ = dispatch2(unary, ID2SYM('~'), $2);
07218                     %*/
07219                     ;}
07220     break;
07221 
07222   case 229:
07223 
07224 /* Line 1464 of yacc.c  */
07225 #line 2293 "parse.y"
07226     {
07227                     /*%%%*/
07228                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tLSHFT, (yyvsp[(3) - (3)].node));
07229                     /*%
07230                         $$ = dispatch3(binary, $1, ripper_intern("<<"), $3);
07231                     %*/
07232                     ;}
07233     break;
07234 
07235   case 230:
07236 
07237 /* Line 1464 of yacc.c  */
07238 #line 2301 "parse.y"
07239     {
07240                     /*%%%*/
07241                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tRSHFT, (yyvsp[(3) - (3)].node));
07242                     /*%
07243                         $$ = dispatch3(binary, $1, ripper_intern(">>"), $3);
07244                     %*/
07245                     ;}
07246     break;
07247 
07248   case 231:
07249 
07250 /* Line 1464 of yacc.c  */
07251 #line 2309 "parse.y"
07252     {
07253                     /*%%%*/
07254                         (yyval.node) = logop(NODE_AND, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
07255                     /*%
07256                         $$ = dispatch3(binary, $1, ripper_intern("&&"), $3);
07257                     %*/
07258                     ;}
07259     break;
07260 
07261   case 232:
07262 
07263 /* Line 1464 of yacc.c  */
07264 #line 2317 "parse.y"
07265     {
07266                     /*%%%*/
07267                         (yyval.node) = logop(NODE_OR, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
07268                     /*%
07269                         $$ = dispatch3(binary, $1, ripper_intern("||"), $3);
07270                     %*/
07271                     ;}
07272     break;
07273 
07274   case 233:
07275 
07276 /* Line 1464 of yacc.c  */
07277 #line 2324 "parse.y"
07278     {in_defined = 1;;}
07279     break;
07280 
07281   case 234:
07282 
07283 /* Line 1464 of yacc.c  */
07284 #line 2325 "parse.y"
07285     {
07286                     /*%%%*/
07287                         in_defined = 0;
07288                         (yyval.node) = NEW_DEFINED((yyvsp[(4) - (4)].node));
07289                     /*%
07290                         in_defined = 0;
07291                         $$ = dispatch1(defined, $4);
07292                     %*/
07293                     ;}
07294     break;
07295 
07296   case 235:
07297 
07298 /* Line 1464 of yacc.c  */
07299 #line 2335 "parse.y"
07300     {
07301                     /*%%%*/
07302                         value_expr((yyvsp[(1) - (6)].node));
07303                         (yyval.node) = NEW_IF(cond((yyvsp[(1) - (6)].node)), (yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node));
07304                         fixpos((yyval.node), (yyvsp[(1) - (6)].node));
07305                     /*%
07306                         $$ = dispatch3(ifop, $1, $3, $6);
07307                     %*/
07308                     ;}
07309     break;
07310 
07311   case 236:
07312 
07313 /* Line 1464 of yacc.c  */
07314 #line 2345 "parse.y"
07315     {
07316                         (yyval.node) = (yyvsp[(1) - (1)].node);
07317                     ;}
07318     break;
07319 
07320   case 237:
07321 
07322 /* Line 1464 of yacc.c  */
07323 #line 2351 "parse.y"
07324     {
07325                     /*%%%*/
07326                         value_expr((yyvsp[(1) - (1)].node));
07327                         (yyval.node) = (yyvsp[(1) - (1)].node);
07328                         if (!(yyval.node)) (yyval.node) = NEW_NIL();
07329                     /*%
07330                         $$ = $1;
07331                     %*/
07332                     ;}
07333     break;
07334 
07335   case 239:
07336 
07337 /* Line 1464 of yacc.c  */
07338 #line 2364 "parse.y"
07339     {
07340                         (yyval.node) = (yyvsp[(1) - (2)].node);
07341                     ;}
07342     break;
07343 
07344   case 240:
07345 
07346 /* Line 1464 of yacc.c  */
07347 #line 2368 "parse.y"
07348     {
07349                     /*%%%*/
07350                         (yyval.node) = arg_append((yyvsp[(1) - (4)].node), NEW_HASH((yyvsp[(3) - (4)].node)));
07351                     /*%
07352                         $$ = arg_add_assocs($1, $3);
07353                     %*/
07354                     ;}
07355     break;
07356 
07357   case 241:
07358 
07359 /* Line 1464 of yacc.c  */
07360 #line 2376 "parse.y"
07361     {
07362                     /*%%%*/
07363                         (yyval.node) = NEW_LIST(NEW_HASH((yyvsp[(1) - (2)].node)));
07364                     /*%
07365                         $$ = arg_add_assocs(arg_new(), $1);
07366                     %*/
07367                     ;}
07368     break;
07369 
07370   case 242:
07371 
07372 /* Line 1464 of yacc.c  */
07373 #line 2386 "parse.y"
07374     {
07375                     /*%%%*/
07376                         (yyval.node) = (yyvsp[(2) - (3)].node);
07377                     /*%
07378                         $$ = dispatch1(arg_paren, escape_Qundef($2));
07379                     %*/
07380                     ;}
07381     break;
07382 
07383   case 247:
07384 
07385 /* Line 1464 of yacc.c  */
07386 #line 2404 "parse.y"
07387     {
07388                     /*%%%*/
07389                         value_expr((yyvsp[(1) - (1)].node));
07390                         (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
07391                     /*%
07392                         $$ = arg_add(arg_new(), $1);
07393                     %*/
07394                     ;}
07395     break;
07396 
07397   case 248:
07398 
07399 /* Line 1464 of yacc.c  */
07400 #line 2413 "parse.y"
07401     {
07402                     /*%%%*/
07403                         (yyval.node) = arg_blk_pass((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
07404                     /*%
07405                         $$ = arg_add_optblock($1, $2);
07406                     %*/
07407                     ;}
07408     break;
07409 
07410   case 249:
07411 
07412 /* Line 1464 of yacc.c  */
07413 #line 2421 "parse.y"
07414     {
07415                     /*%%%*/
07416                         (yyval.node) = NEW_LIST(NEW_HASH((yyvsp[(1) - (2)].node)));
07417                         (yyval.node) = arg_blk_pass((yyval.node), (yyvsp[(2) - (2)].node));
07418                     /*%
07419                         $$ = arg_add_assocs(arg_new(), $1);
07420                         $$ = arg_add_optblock($$, $2);
07421                     %*/
07422                     ;}
07423     break;
07424 
07425   case 250:
07426 
07427 /* Line 1464 of yacc.c  */
07428 #line 2431 "parse.y"
07429     {
07430                     /*%%%*/
07431                         (yyval.node) = arg_append((yyvsp[(1) - (4)].node), NEW_HASH((yyvsp[(3) - (4)].node)));
07432                         (yyval.node) = arg_blk_pass((yyval.node), (yyvsp[(4) - (4)].node));
07433                     /*%
07434                         $$ = arg_add_optblock(arg_add_assocs($1, $3), $4);
07435                     %*/
07436                     ;}
07437     break;
07438 
07439   case 252:
07440 
07441 /* Line 1464 of yacc.c  */
07442 #line 2448 "parse.y"
07443     {
07444                         (yyval.val) = cmdarg_stack;
07445                         CMDARG_PUSH(1);
07446                     ;}
07447     break;
07448 
07449   case 253:
07450 
07451 /* Line 1464 of yacc.c  */
07452 #line 2453 "parse.y"
07453     {
07454                         /* CMDARG_POP() */
07455                         cmdarg_stack = (yyvsp[(1) - (2)].val);
07456                         (yyval.node) = (yyvsp[(2) - (2)].node);
07457                     ;}
07458     break;
07459 
07460   case 254:
07461 
07462 /* Line 1464 of yacc.c  */
07463 #line 2461 "parse.y"
07464     {
07465                     /*%%%*/
07466                         (yyval.node) = NEW_BLOCK_PASS((yyvsp[(2) - (2)].node));
07467                     /*%
07468                         $$ = $2;
07469                     %*/
07470                     ;}
07471     break;
07472 
07473   case 255:
07474 
07475 /* Line 1464 of yacc.c  */
07476 #line 2471 "parse.y"
07477     {
07478                         (yyval.node) = (yyvsp[(2) - (2)].node);
07479                     ;}
07480     break;
07481 
07482   case 256:
07483 
07484 /* Line 1464 of yacc.c  */
07485 #line 2475 "parse.y"
07486     {
07487                         (yyval.node) = 0;
07488                     ;}
07489     break;
07490 
07491   case 257:
07492 
07493 /* Line 1464 of yacc.c  */
07494 #line 2479 "parse.y"
07495     {
07496                         (yyval.node) = 0;
07497                     ;}
07498     break;
07499 
07500   case 258:
07501 
07502 /* Line 1464 of yacc.c  */
07503 #line 2485 "parse.y"
07504     {
07505                     /*%%%*/
07506                         (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
07507                     /*%
07508                         $$ = arg_add(arg_new(), $1);
07509                     %*/
07510                     ;}
07511     break;
07512 
07513   case 259:
07514 
07515 /* Line 1464 of yacc.c  */
07516 #line 2493 "parse.y"
07517     {
07518                     /*%%%*/
07519                         (yyval.node) = NEW_SPLAT((yyvsp[(2) - (2)].node));
07520                     /*%
07521                         $$ = arg_add_star(arg_new(), $2);
07522                     %*/
07523                     ;}
07524     break;
07525 
07526   case 260:
07527 
07528 /* Line 1464 of yacc.c  */
07529 #line 2501 "parse.y"
07530     {
07531                     /*%%%*/
07532                         NODE *n1;
07533                         if ((n1 = splat_array((yyvsp[(1) - (3)].node))) != 0) {
07534                             (yyval.node) = list_append(n1, (yyvsp[(3) - (3)].node));
07535                         }
07536                         else {
07537                             (yyval.node) = arg_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
07538                         }
07539                     /*%
07540                         $$ = arg_add($1, $3);
07541                     %*/
07542                     ;}
07543     break;
07544 
07545   case 261:
07546 
07547 /* Line 1464 of yacc.c  */
07548 #line 2515 "parse.y"
07549     {
07550                     /*%%%*/
07551                         NODE *n1;
07552                         if ((nd_type((yyvsp[(4) - (4)].node)) == NODE_ARRAY) && (n1 = splat_array((yyvsp[(1) - (4)].node))) != 0) {
07553                             (yyval.node) = list_concat(n1, (yyvsp[(4) - (4)].node));
07554                         }
07555                         else {
07556                             (yyval.node) = arg_concat((yyvsp[(1) - (4)].node), (yyvsp[(4) - (4)].node));
07557                         }
07558                     /*%
07559                         $$ = arg_add_star($1, $4);
07560                     %*/
07561                     ;}
07562     break;
07563 
07564   case 262:
07565 
07566 /* Line 1464 of yacc.c  */
07567 #line 2531 "parse.y"
07568     {
07569                     /*%%%*/
07570                         NODE *n1;
07571                         if ((n1 = splat_array((yyvsp[(1) - (3)].node))) != 0) {
07572                             (yyval.node) = list_append(n1, (yyvsp[(3) - (3)].node));
07573                         }
07574                         else {
07575                             (yyval.node) = arg_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
07576                         }
07577                     /*%
07578                         $$ = mrhs_add(args2mrhs($1), $3);
07579                     %*/
07580                     ;}
07581     break;
07582 
07583   case 263:
07584 
07585 /* Line 1464 of yacc.c  */
07586 #line 2545 "parse.y"
07587     {
07588                     /*%%%*/
07589                         NODE *n1;
07590                         if (nd_type((yyvsp[(4) - (4)].node)) == NODE_ARRAY &&
07591                             (n1 = splat_array((yyvsp[(1) - (4)].node))) != 0) {
07592                             (yyval.node) = list_concat(n1, (yyvsp[(4) - (4)].node));
07593                         }
07594                         else {
07595                             (yyval.node) = arg_concat((yyvsp[(1) - (4)].node), (yyvsp[(4) - (4)].node));
07596                         }
07597                     /*%
07598                         $$ = mrhs_add_star(args2mrhs($1), $4);
07599                     %*/
07600                     ;}
07601     break;
07602 
07603   case 264:
07604 
07605 /* Line 1464 of yacc.c  */
07606 #line 2560 "parse.y"
07607     {
07608                     /*%%%*/
07609                         (yyval.node) = NEW_SPLAT((yyvsp[(2) - (2)].node));
07610                     /*%
07611                         $$ = mrhs_add_star(mrhs_new(), $2);
07612                     %*/
07613                     ;}
07614     break;
07615 
07616   case 273:
07617 
07618 /* Line 1464 of yacc.c  */
07619 #line 2578 "parse.y"
07620     {
07621                     /*%%%*/
07622                         (yyval.node) = NEW_FCALL((yyvsp[(1) - (1)].id), 0);
07623                     /*%
07624                         $$ = method_arg(dispatch1(fcall, $1), arg_new());
07625                     %*/
07626                     ;}
07627     break;
07628 
07629   case 274:
07630 
07631 /* Line 1464 of yacc.c  */
07632 #line 2586 "parse.y"
07633     {
07634                     /*%%%*/
07635                         (yyval.num) = ruby_sourceline;
07636                     /*%
07637                     %*/
07638                     ;}
07639     break;
07640 
07641   case 275:
07642 
07643 /* Line 1464 of yacc.c  */
07644 #line 2594 "parse.y"
07645     {
07646                     /*%%%*/
07647                         if ((yyvsp[(3) - (4)].node) == NULL) {
07648                             (yyval.node) = NEW_NIL();
07649                         }
07650                         else {
07651                             if (nd_type((yyvsp[(3) - (4)].node)) == NODE_RESCUE ||
07652                                 nd_type((yyvsp[(3) - (4)].node)) == NODE_ENSURE)
07653                                 nd_set_line((yyvsp[(3) - (4)].node), (yyvsp[(2) - (4)].num));
07654                             (yyval.node) = NEW_BEGIN((yyvsp[(3) - (4)].node));
07655                         }
07656                         nd_set_line((yyval.node), (yyvsp[(2) - (4)].num));
07657                     /*%
07658                         $$ = dispatch1(begin, $3);
07659                     %*/
07660                     ;}
07661     break;
07662 
07663   case 276:
07664 
07665 /* Line 1464 of yacc.c  */
07666 #line 2610 "parse.y"
07667     {lex_state = EXPR_ENDARG;;}
07668     break;
07669 
07670   case 277:
07671 
07672 /* Line 1464 of yacc.c  */
07673 #line 2611 "parse.y"
07674     {
07675                         rb_warning0("(...) interpreted as grouped expression");
07676                     /*%%%*/
07677                         (yyval.node) = (yyvsp[(2) - (4)].node);
07678                     /*%
07679                         $$ = dispatch1(paren, $2);
07680                     %*/
07681                     ;}
07682     break;
07683 
07684   case 278:
07685 
07686 /* Line 1464 of yacc.c  */
07687 #line 2620 "parse.y"
07688     {
07689                     /*%%%*/
07690                         (yyval.node) = (yyvsp[(2) - (3)].node);
07691                     /*%
07692                         $$ = dispatch1(paren, $2);
07693                     %*/
07694                     ;}
07695     break;
07696 
07697   case 279:
07698 
07699 /* Line 1464 of yacc.c  */
07700 #line 2628 "parse.y"
07701     {
07702                     /*%%%*/
07703                         (yyval.node) = NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
07704                     /*%
07705                         $$ = dispatch2(const_path_ref, $1, $3);
07706                     %*/
07707                     ;}
07708     break;
07709 
07710   case 280:
07711 
07712 /* Line 1464 of yacc.c  */
07713 #line 2636 "parse.y"
07714     {
07715                     /*%%%*/
07716                         (yyval.node) = NEW_COLON3((yyvsp[(2) - (2)].id));
07717                     /*%
07718                         $$ = dispatch1(top_const_ref, $2);
07719                     %*/
07720                     ;}
07721     break;
07722 
07723   case 281:
07724 
07725 /* Line 1464 of yacc.c  */
07726 #line 2644 "parse.y"
07727     {
07728                     /*%%%*/
07729                         if ((yyvsp[(2) - (3)].node) == 0) {
07730                             (yyval.node) = NEW_ZARRAY(); /* zero length array*/
07731                         }
07732                         else {
07733                             (yyval.node) = (yyvsp[(2) - (3)].node);
07734                         }
07735                     /*%
07736                         $$ = dispatch1(array, escape_Qundef($2));
07737                     %*/
07738                     ;}
07739     break;
07740 
07741   case 282:
07742 
07743 /* Line 1464 of yacc.c  */
07744 #line 2657 "parse.y"
07745     {
07746                     /*%%%*/
07747                         (yyval.node) = NEW_HASH((yyvsp[(2) - (3)].node));
07748                     /*%
07749                         $$ = dispatch1(hash, escape_Qundef($2));
07750                     %*/
07751                     ;}
07752     break;
07753 
07754   case 283:
07755 
07756 /* Line 1464 of yacc.c  */
07757 #line 2665 "parse.y"
07758     {
07759                     /*%%%*/
07760                         (yyval.node) = NEW_RETURN(0);
07761                     /*%
07762                         $$ = dispatch0(return0);
07763                     %*/
07764                     ;}
07765     break;
07766 
07767   case 284:
07768 
07769 /* Line 1464 of yacc.c  */
07770 #line 2673 "parse.y"
07771     {
07772                     /*%%%*/
07773                         (yyval.node) = new_yield((yyvsp[(3) - (4)].node));
07774                     /*%
07775                         $$ = dispatch1(yield, dispatch1(paren, $3));
07776                     %*/
07777                     ;}
07778     break;
07779 
07780   case 285:
07781 
07782 /* Line 1464 of yacc.c  */
07783 #line 2681 "parse.y"
07784     {
07785                     /*%%%*/
07786                         (yyval.node) = NEW_YIELD(0, Qfalse);
07787                     /*%
07788                         $$ = dispatch1(yield, dispatch1(paren, arg_new()));
07789                     %*/
07790                     ;}
07791     break;
07792 
07793   case 286:
07794 
07795 /* Line 1464 of yacc.c  */
07796 #line 2689 "parse.y"
07797     {
07798                     /*%%%*/
07799                         (yyval.node) = NEW_YIELD(0, Qfalse);
07800                     /*%
07801                         $$ = dispatch0(yield0);
07802                     %*/
07803                     ;}
07804     break;
07805 
07806   case 287:
07807 
07808 /* Line 1464 of yacc.c  */
07809 #line 2696 "parse.y"
07810     {in_defined = 1;;}
07811     break;
07812 
07813   case 288:
07814 
07815 /* Line 1464 of yacc.c  */
07816 #line 2697 "parse.y"
07817     {
07818                     /*%%%*/
07819                         in_defined = 0;
07820                         (yyval.node) = NEW_DEFINED((yyvsp[(5) - (6)].node));
07821                     /*%
07822                         in_defined = 0;
07823                         $$ = dispatch1(defined, $5);
07824                     %*/
07825                     ;}
07826     break;
07827 
07828   case 289:
07829 
07830 /* Line 1464 of yacc.c  */
07831 #line 2707 "parse.y"
07832     {
07833                     /*%%%*/
07834                         (yyval.node) = call_uni_op(cond((yyvsp[(3) - (4)].node)), '!');
07835                     /*%
07836                         $$ = dispatch2(unary, ripper_intern("not"), $3);
07837                     %*/
07838                     ;}
07839     break;
07840 
07841   case 290:
07842 
07843 /* Line 1464 of yacc.c  */
07844 #line 2715 "parse.y"
07845     {
07846                     /*%%%*/
07847                         (yyval.node) = call_uni_op(cond(NEW_NIL()), '!');
07848                     /*%
07849                         $$ = dispatch2(unary, ripper_intern("not"), Qnil);
07850                     %*/
07851                     ;}
07852     break;
07853 
07854   case 291:
07855 
07856 /* Line 1464 of yacc.c  */
07857 #line 2723 "parse.y"
07858     {
07859                     /*%%%*/
07860                         (yyvsp[(2) - (2)].node)->nd_iter = NEW_FCALL((yyvsp[(1) - (2)].id), 0);
07861                         (yyval.node) = (yyvsp[(2) - (2)].node);
07862                         fixpos((yyvsp[(2) - (2)].node)->nd_iter, (yyvsp[(2) - (2)].node));
07863                     /*%
07864                         $$ = method_arg(dispatch1(fcall, $1), arg_new());
07865                         $$ = method_add_block($$, $2);
07866                     %*/
07867                     ;}
07868     break;
07869 
07870   case 293:
07871 
07872 /* Line 1464 of yacc.c  */
07873 #line 2735 "parse.y"
07874     {
07875                     /*%%%*/
07876                         block_dup_check((yyvsp[(1) - (2)].node)->nd_args, (yyvsp[(2) - (2)].node));
07877                         (yyvsp[(2) - (2)].node)->nd_iter = (yyvsp[(1) - (2)].node);
07878                         (yyval.node) = (yyvsp[(2) - (2)].node);
07879                         fixpos((yyval.node), (yyvsp[(1) - (2)].node));
07880                     /*%
07881                         $$ = method_add_block($1, $2);
07882                     %*/
07883                     ;}
07884     break;
07885 
07886   case 294:
07887 
07888 /* Line 1464 of yacc.c  */
07889 #line 2746 "parse.y"
07890     {
07891                         (yyval.node) = (yyvsp[(2) - (2)].node);
07892                     ;}
07893     break;
07894 
07895   case 295:
07896 
07897 /* Line 1464 of yacc.c  */
07898 #line 2753 "parse.y"
07899     {
07900                     /*%%%*/
07901                         (yyval.node) = NEW_IF(cond((yyvsp[(2) - (6)].node)), (yyvsp[(4) - (6)].node), (yyvsp[(5) - (6)].node));
07902                         fixpos((yyval.node), (yyvsp[(2) - (6)].node));
07903                     /*%
07904                         $$ = dispatch3(if, $2, $4, escape_Qundef($5));
07905                     %*/
07906                     ;}
07907     break;
07908 
07909   case 296:
07910 
07911 /* Line 1464 of yacc.c  */
07912 #line 2765 "parse.y"
07913     {
07914                     /*%%%*/
07915                         (yyval.node) = NEW_UNLESS(cond((yyvsp[(2) - (6)].node)), (yyvsp[(4) - (6)].node), (yyvsp[(5) - (6)].node));
07916                         fixpos((yyval.node), (yyvsp[(2) - (6)].node));
07917                     /*%
07918                         $$ = dispatch3(unless, $2, $4, escape_Qundef($5));
07919                     %*/
07920                     ;}
07921     break;
07922 
07923   case 297:
07924 
07925 /* Line 1464 of yacc.c  */
07926 #line 2773 "parse.y"
07927     {COND_PUSH(1);;}
07928     break;
07929 
07930   case 298:
07931 
07932 /* Line 1464 of yacc.c  */
07933 #line 2773 "parse.y"
07934     {COND_POP();;}
07935     break;
07936 
07937   case 299:
07938 
07939 /* Line 1464 of yacc.c  */
07940 #line 2776 "parse.y"
07941     {
07942                     /*%%%*/
07943                         (yyval.node) = NEW_WHILE(cond((yyvsp[(3) - (7)].node)), (yyvsp[(6) - (7)].node), 1);
07944                         fixpos((yyval.node), (yyvsp[(3) - (7)].node));
07945                     /*%
07946                         $$ = dispatch2(while, $3, $6);
07947                     %*/
07948                     ;}
07949     break;
07950 
07951   case 300:
07952 
07953 /* Line 1464 of yacc.c  */
07954 #line 2784 "parse.y"
07955     {COND_PUSH(1);;}
07956     break;
07957 
07958   case 301:
07959 
07960 /* Line 1464 of yacc.c  */
07961 #line 2784 "parse.y"
07962     {COND_POP();;}
07963     break;
07964 
07965   case 302:
07966 
07967 /* Line 1464 of yacc.c  */
07968 #line 2787 "parse.y"
07969     {
07970                     /*%%%*/
07971                         (yyval.node) = NEW_UNTIL(cond((yyvsp[(3) - (7)].node)), (yyvsp[(6) - (7)].node), 1);
07972                         fixpos((yyval.node), (yyvsp[(3) - (7)].node));
07973                     /*%
07974                         $$ = dispatch2(until, $3, $6);
07975                     %*/
07976                     ;}
07977     break;
07978 
07979   case 303:
07980 
07981 /* Line 1464 of yacc.c  */
07982 #line 2798 "parse.y"
07983     {
07984                     /*%%%*/
07985                         (yyval.node) = NEW_CASE((yyvsp[(2) - (5)].node), (yyvsp[(4) - (5)].node));
07986                         fixpos((yyval.node), (yyvsp[(2) - (5)].node));
07987                     /*%
07988                         $$ = dispatch2(case, $2, $4);
07989                     %*/
07990                     ;}
07991     break;
07992 
07993   case 304:
07994 
07995 /* Line 1464 of yacc.c  */
07996 #line 2807 "parse.y"
07997     {
07998                     /*%%%*/
07999                         (yyval.node) = NEW_CASE(0, (yyvsp[(3) - (4)].node));
08000                     /*%
08001                         $$ = dispatch2(case, Qnil, $3);
08002                     %*/
08003                     ;}
08004     break;
08005 
08006   case 305:
08007 
08008 /* Line 1464 of yacc.c  */
08009 #line 2815 "parse.y"
08010     {COND_PUSH(1);;}
08011     break;
08012 
08013   case 306:
08014 
08015 /* Line 1464 of yacc.c  */
08016 #line 2817 "parse.y"
08017     {COND_POP();;}
08018     break;
08019 
08020   case 307:
08021 
08022 /* Line 1464 of yacc.c  */
08023 #line 2820 "parse.y"
08024     {
08025                     /*%%%*/
08026                         /*
08027                          *  for a, b, c in e
08028                          *  #=>
08029                          *  e.each{|*x| a, b, c = x
08030                          *
08031                          *  for a in e
08032                          *  #=>
08033                          *  e.each{|x| a, = x}
08034                          */
08035                         ID id = internal_id();
08036                         ID *tbl = ALLOC_N(ID, 2);
08037                         NODE *m = NEW_ARGS_AUX(0, 0);
08038                         NODE *args, *scope;
08039 
08040                         if (nd_type((yyvsp[(2) - (9)].node)) == NODE_MASGN) {
08041                             /* if args.length == 1 && args[0].kind_of?(Array)
08042                              *   args = args[0]
08043                              * end
08044                              */
08045                             NODE *one = NEW_LIST(NEW_LIT(INT2FIX(1)));
08046                             NODE *zero = NEW_LIST(NEW_LIT(INT2FIX(0)));
08047                             m->nd_next = block_append(
08048                                 NEW_IF(
08049                                     NEW_NODE(NODE_AND,
08050                                              NEW_CALL(NEW_CALL(NEW_DVAR(id), rb_intern("length"), 0),
08051                                                       rb_intern("=="), one),
08052                                              NEW_CALL(NEW_CALL(NEW_DVAR(id), rb_intern("[]"), zero),
08053                                                       rb_intern("kind_of?"), NEW_LIST(NEW_LIT(rb_cArray))),
08054                                              0),
08055                                     NEW_DASGN_CURR(id,
08056                                                    NEW_CALL(NEW_DVAR(id), rb_intern("[]"), zero)),
08057                                     0),
08058                                 node_assign((yyvsp[(2) - (9)].node), NEW_DVAR(id)));
08059 
08060                             args = new_args(m, 0, id, 0, 0);
08061                         }
08062                         else {
08063                             if (nd_type((yyvsp[(2) - (9)].node)) == NODE_LASGN ||
08064                                 nd_type((yyvsp[(2) - (9)].node)) == NODE_DASGN ||
08065                                 nd_type((yyvsp[(2) - (9)].node)) == NODE_DASGN_CURR) {
08066                                 (yyvsp[(2) - (9)].node)->nd_value = NEW_DVAR(id);
08067                                 m->nd_plen = 1;
08068                                 m->nd_next = (yyvsp[(2) - (9)].node);
08069                                 args = new_args(m, 0, 0, 0, 0);
08070                             }
08071                             else {
08072                                 m->nd_next = node_assign(NEW_MASGN(NEW_LIST((yyvsp[(2) - (9)].node)), 0), NEW_DVAR(id));
08073                                 args = new_args(m, 0, id, 0, 0);
08074                             }
08075                         }
08076                         scope = NEW_NODE(NODE_SCOPE, tbl, (yyvsp[(8) - (9)].node), args);
08077                         tbl[0] = 1; tbl[1] = id;
08078                         (yyval.node) = NEW_FOR(0, (yyvsp[(5) - (9)].node), scope);
08079                         fixpos((yyval.node), (yyvsp[(2) - (9)].node));
08080                     /*%
08081                         $$ = dispatch3(for, $2, $5, $8);
08082                     %*/
08083                     ;}
08084     break;
08085 
08086   case 308:
08087 
08088 /* Line 1464 of yacc.c  */
08089 #line 2881 "parse.y"
08090     {
08091                         if (in_def || in_single)
08092                             yyerror("class definition in method body");
08093                         local_push(0);
08094                     /*%%%*/
08095                         (yyval.num) = ruby_sourceline;
08096                     /*%
08097                     %*/
08098                     ;}
08099     break;
08100 
08101   case 309:
08102 
08103 /* Line 1464 of yacc.c  */
08104 #line 2892 "parse.y"
08105     {
08106                     /*%%%*/
08107                         (yyval.node) = NEW_CLASS((yyvsp[(2) - (6)].node), (yyvsp[(5) - (6)].node), (yyvsp[(3) - (6)].node));
08108                         nd_set_line((yyval.node), (yyvsp[(4) - (6)].num));
08109                     /*%
08110                         $$ = dispatch3(class, $2, $3, $5);
08111                     %*/
08112                         local_pop();
08113                     ;}
08114     break;
08115 
08116   case 310:
08117 
08118 /* Line 1464 of yacc.c  */
08119 #line 2902 "parse.y"
08120     {
08121                         (yyval.num) = in_def;
08122                         in_def = 0;
08123                     ;}
08124     break;
08125 
08126   case 311:
08127 
08128 /* Line 1464 of yacc.c  */
08129 #line 2907 "parse.y"
08130     {
08131                         (yyval.num) = in_single;
08132                         in_single = 0;
08133                         local_push(0);
08134                     ;}
08135     break;
08136 
08137   case 312:
08138 
08139 /* Line 1464 of yacc.c  */
08140 #line 2914 "parse.y"
08141     {
08142                     /*%%%*/
08143                         (yyval.node) = NEW_SCLASS((yyvsp[(3) - (8)].node), (yyvsp[(7) - (8)].node));
08144                         fixpos((yyval.node), (yyvsp[(3) - (8)].node));
08145                     /*%
08146                         $$ = dispatch2(sclass, $3, $7);
08147                     %*/
08148                         local_pop();
08149                         in_def = (yyvsp[(4) - (8)].num);
08150                         in_single = (yyvsp[(6) - (8)].num);
08151                     ;}
08152     break;
08153 
08154   case 313:
08155 
08156 /* Line 1464 of yacc.c  */
08157 #line 2926 "parse.y"
08158     {
08159                         if (in_def || in_single)
08160                             yyerror("module definition in method body");
08161                         local_push(0);
08162                     /*%%%*/
08163                         (yyval.num) = ruby_sourceline;
08164                     /*%
08165                     %*/
08166                     ;}
08167     break;
08168 
08169   case 314:
08170 
08171 /* Line 1464 of yacc.c  */
08172 #line 2937 "parse.y"
08173     {
08174                     /*%%%*/
08175                         (yyval.node) = NEW_MODULE((yyvsp[(2) - (5)].node), (yyvsp[(4) - (5)].node));
08176                         nd_set_line((yyval.node), (yyvsp[(3) - (5)].num));
08177                     /*%
08178                         $$ = dispatch2(module, $2, $4);
08179                     %*/
08180                         local_pop();
08181                     ;}
08182     break;
08183 
08184   case 315:
08185 
08186 /* Line 1464 of yacc.c  */
08187 #line 2947 "parse.y"
08188     {
08189                         (yyval.id) = cur_mid;
08190                         cur_mid = (yyvsp[(2) - (2)].id);
08191                         in_def++;
08192                         local_push(0);
08193                     ;}
08194     break;
08195 
08196   case 316:
08197 
08198 /* Line 1464 of yacc.c  */
08199 #line 2956 "parse.y"
08200     {
08201                     /*%%%*/
08202                         NODE *body = remove_begin((yyvsp[(5) - (6)].node));
08203                         reduce_nodes(&body);
08204                         (yyval.node) = NEW_DEFN((yyvsp[(2) - (6)].id), (yyvsp[(4) - (6)].node), body, NOEX_PRIVATE);
08205                         nd_set_line((yyval.node), (yyvsp[(1) - (6)].num));
08206                     /*%
08207                         $$ = dispatch3(def, $2, $4, $5);
08208                     %*/
08209                         local_pop();
08210                         in_def--;
08211                         cur_mid = (yyvsp[(3) - (6)].id);
08212                     ;}
08213     break;
08214 
08215   case 317:
08216 
08217 /* Line 1464 of yacc.c  */
08218 #line 2969 "parse.y"
08219     {lex_state = EXPR_FNAME;;}
08220     break;
08221 
08222   case 318:
08223 
08224 /* Line 1464 of yacc.c  */
08225 #line 2970 "parse.y"
08226     {
08227                         in_single++;
08228                         lex_state = EXPR_ENDFN; /* force for args */
08229                         local_push(0);
08230                     ;}
08231     break;
08232 
08233   case 319:
08234 
08235 /* Line 1464 of yacc.c  */
08236 #line 2978 "parse.y"
08237     {
08238                     /*%%%*/
08239                         NODE *body = remove_begin((yyvsp[(8) - (9)].node));
08240                         reduce_nodes(&body);
08241                         (yyval.node) = NEW_DEFS((yyvsp[(2) - (9)].node), (yyvsp[(5) - (9)].id), (yyvsp[(7) - (9)].node), body);
08242                         nd_set_line((yyval.node), (yyvsp[(1) - (9)].num));
08243                     /*%
08244                         $$ = dispatch5(defs, $2, $3, $5, $7, $8);
08245                     %*/
08246                         local_pop();
08247                         in_single--;
08248                     ;}
08249     break;
08250 
08251   case 320:
08252 
08253 /* Line 1464 of yacc.c  */
08254 #line 2991 "parse.y"
08255     {
08256                     /*%%%*/
08257                         (yyval.node) = NEW_BREAK(0);
08258                     /*%
08259                         $$ = dispatch1(break, arg_new());
08260                     %*/
08261                     ;}
08262     break;
08263 
08264   case 321:
08265 
08266 /* Line 1464 of yacc.c  */
08267 #line 2999 "parse.y"
08268     {
08269                     /*%%%*/
08270                         (yyval.node) = NEW_NEXT(0);
08271                     /*%
08272                         $$ = dispatch1(next, arg_new());
08273                     %*/
08274                     ;}
08275     break;
08276 
08277   case 322:
08278 
08279 /* Line 1464 of yacc.c  */
08280 #line 3007 "parse.y"
08281     {
08282                     /*%%%*/
08283                         (yyval.node) = NEW_REDO();
08284                     /*%
08285                         $$ = dispatch0(redo);
08286                     %*/
08287                     ;}
08288     break;
08289 
08290   case 323:
08291 
08292 /* Line 1464 of yacc.c  */
08293 #line 3015 "parse.y"
08294     {
08295                     /*%%%*/
08296                         (yyval.node) = NEW_RETRY();
08297                     /*%
08298                         $$ = dispatch0(retry);
08299                     %*/
08300                     ;}
08301     break;
08302 
08303   case 324:
08304 
08305 /* Line 1464 of yacc.c  */
08306 #line 3025 "parse.y"
08307     {
08308                     /*%%%*/
08309                         value_expr((yyvsp[(1) - (1)].node));
08310                         (yyval.node) = (yyvsp[(1) - (1)].node);
08311                         if (!(yyval.node)) (yyval.node) = NEW_NIL();
08312                     /*%
08313                         $$ = $1;
08314                     %*/
08315                     ;}
08316     break;
08317 
08318   case 325:
08319 
08320 /* Line 1464 of yacc.c  */
08321 #line 3037 "parse.y"
08322     {
08323                         token_info_push("begin");
08324                     ;}
08325     break;
08326 
08327   case 326:
08328 
08329 /* Line 1464 of yacc.c  */
08330 #line 3043 "parse.y"
08331     {
08332                         token_info_push("if");
08333                     ;}
08334     break;
08335 
08336   case 327:
08337 
08338 /* Line 1464 of yacc.c  */
08339 #line 3049 "parse.y"
08340     {
08341                         token_info_push("unless");
08342                     ;}
08343     break;
08344 
08345   case 328:
08346 
08347 /* Line 1464 of yacc.c  */
08348 #line 3055 "parse.y"
08349     {
08350                         token_info_push("while");
08351                     ;}
08352     break;
08353 
08354   case 329:
08355 
08356 /* Line 1464 of yacc.c  */
08357 #line 3061 "parse.y"
08358     {
08359                         token_info_push("until");
08360                     ;}
08361     break;
08362 
08363   case 330:
08364 
08365 /* Line 1464 of yacc.c  */
08366 #line 3067 "parse.y"
08367     {
08368                         token_info_push("case");
08369                     ;}
08370     break;
08371 
08372   case 331:
08373 
08374 /* Line 1464 of yacc.c  */
08375 #line 3073 "parse.y"
08376     {
08377                         token_info_push("for");
08378                     ;}
08379     break;
08380 
08381   case 332:
08382 
08383 /* Line 1464 of yacc.c  */
08384 #line 3079 "parse.y"
08385     {
08386                         token_info_push("class");
08387                     ;}
08388     break;
08389 
08390   case 333:
08391 
08392 /* Line 1464 of yacc.c  */
08393 #line 3085 "parse.y"
08394     {
08395                         token_info_push("module");
08396                     ;}
08397     break;
08398 
08399   case 334:
08400 
08401 /* Line 1464 of yacc.c  */
08402 #line 3091 "parse.y"
08403     {
08404                         token_info_push("def");
08405                     /*%%%*/
08406                         (yyval.num) = ruby_sourceline;
08407                     /*%
08408                     %*/
08409                     ;}
08410     break;
08411 
08412   case 335:
08413 
08414 /* Line 1464 of yacc.c  */
08415 #line 3101 "parse.y"
08416     {
08417                         token_info_pop("end");
08418                     ;}
08419     break;
08420 
08421   case 342:
08422 
08423 /* Line 1464 of yacc.c  */
08424 #line 3131 "parse.y"
08425     {
08426                     /*%%%*/
08427                         (yyval.node) = NEW_IF(cond((yyvsp[(2) - (5)].node)), (yyvsp[(4) - (5)].node), (yyvsp[(5) - (5)].node));
08428                         fixpos((yyval.node), (yyvsp[(2) - (5)].node));
08429                     /*%
08430                         $$ = dispatch3(elsif, $2, $4, escape_Qundef($5));
08431                     %*/
08432                     ;}
08433     break;
08434 
08435   case 344:
08436 
08437 /* Line 1464 of yacc.c  */
08438 #line 3143 "parse.y"
08439     {
08440                     /*%%%*/
08441                         (yyval.node) = (yyvsp[(2) - (2)].node);
08442                     /*%
08443                         $$ = dispatch1(else, $2);
08444                     %*/
08445                     ;}
08446     break;
08447 
08448   case 347:
08449 
08450 /* Line 1464 of yacc.c  */
08451 #line 3157 "parse.y"
08452     {
08453                         (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
08454                     /*%%%*/
08455                     /*%
08456                         $$ = dispatch1(mlhs_paren, $$);
08457                     %*/
08458                     ;}
08459     break;
08460 
08461   case 348:
08462 
08463 /* Line 1464 of yacc.c  */
08464 #line 3165 "parse.y"
08465     {
08466                     /*%%%*/
08467                         (yyval.node) = (yyvsp[(2) - (3)].node);
08468                     /*%
08469                         $$ = dispatch1(mlhs_paren, $2);
08470                     %*/
08471                     ;}
08472     break;
08473 
08474   case 349:
08475 
08476 /* Line 1464 of yacc.c  */
08477 #line 3175 "parse.y"
08478     {
08479                     /*%%%*/
08480                         (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
08481                     /*%
08482                         $$ = mlhs_add(mlhs_new(), $1);
08483                     %*/
08484                     ;}
08485     break;
08486 
08487   case 350:
08488 
08489 /* Line 1464 of yacc.c  */
08490 #line 3183 "parse.y"
08491     {
08492                     /*%%%*/
08493                         (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
08494                     /*%
08495                         $$ = mlhs_add($1, $3);
08496                     %*/
08497                     ;}
08498     break;
08499 
08500   case 351:
08501 
08502 /* Line 1464 of yacc.c  */
08503 #line 3193 "parse.y"
08504     {
08505                     /*%%%*/
08506                         (yyval.node) = NEW_MASGN((yyvsp[(1) - (1)].node), 0);
08507                     /*%
08508                         $$ = $1;
08509                     %*/
08510                     ;}
08511     break;
08512 
08513   case 352:
08514 
08515 /* Line 1464 of yacc.c  */
08516 #line 3201 "parse.y"
08517     {
08518                         (yyval.node) = assignable((yyvsp[(4) - (4)].id), 0);
08519                     /*%%%*/
08520                         (yyval.node) = NEW_MASGN((yyvsp[(1) - (4)].node), (yyval.node));
08521                     /*%
08522                         $$ = mlhs_add_star($1, $$);
08523                     %*/
08524                     ;}
08525     break;
08526 
08527   case 353:
08528 
08529 /* Line 1464 of yacc.c  */
08530 #line 3210 "parse.y"
08531     {
08532                         (yyval.node) = assignable((yyvsp[(4) - (6)].id), 0);
08533                     /*%%%*/
08534                         (yyval.node) = NEW_MASGN((yyvsp[(1) - (6)].node), NEW_POSTARG((yyval.node), (yyvsp[(6) - (6)].node)));
08535                     /*%
08536                         $$ = mlhs_add_star($1, $$);
08537                     %*/
08538                     ;}
08539     break;
08540 
08541   case 354:
08542 
08543 /* Line 1464 of yacc.c  */
08544 #line 3219 "parse.y"
08545     {
08546                     /*%%%*/
08547                         (yyval.node) = NEW_MASGN((yyvsp[(1) - (3)].node), -1);
08548                     /*%
08549                         $$ = mlhs_add_star($1, Qnil);
08550                     %*/
08551                     ;}
08552     break;
08553 
08554   case 355:
08555 
08556 /* Line 1464 of yacc.c  */
08557 #line 3227 "parse.y"
08558     {
08559                     /*%%%*/
08560                         (yyval.node) = NEW_MASGN((yyvsp[(1) - (5)].node), NEW_POSTARG(-1, (yyvsp[(5) - (5)].node)));
08561                     /*%
08562                         $$ = mlhs_add_star($1, $5);
08563                     %*/
08564                     ;}
08565     break;
08566 
08567   case 356:
08568 
08569 /* Line 1464 of yacc.c  */
08570 #line 3235 "parse.y"
08571     {
08572                         (yyval.node) = assignable((yyvsp[(2) - (2)].id), 0);
08573                     /*%%%*/
08574                         (yyval.node) = NEW_MASGN(0, (yyval.node));
08575                     /*%
08576                         $$ = mlhs_add_star(mlhs_new(), $$);
08577                     %*/
08578                     ;}
08579     break;
08580 
08581   case 357:
08582 
08583 /* Line 1464 of yacc.c  */
08584 #line 3244 "parse.y"
08585     {
08586                         (yyval.node) = assignable((yyvsp[(2) - (4)].id), 0);
08587                     /*%%%*/
08588                         (yyval.node) = NEW_MASGN(0, NEW_POSTARG((yyval.node), (yyvsp[(4) - (4)].node)));
08589                     /*%
08590                       #if 0
08591                       TODO: Check me
08592                       #endif
08593                         $$ = mlhs_add_star($$, $4);
08594                     %*/
08595                     ;}
08596     break;
08597 
08598   case 358:
08599 
08600 /* Line 1464 of yacc.c  */
08601 #line 3256 "parse.y"
08602     {
08603                     /*%%%*/
08604                         (yyval.node) = NEW_MASGN(0, -1);
08605                     /*%
08606                         $$ = mlhs_add_star(mlhs_new(), Qnil);
08607                     %*/
08608                     ;}
08609     break;
08610 
08611   case 359:
08612 
08613 /* Line 1464 of yacc.c  */
08614 #line 3264 "parse.y"
08615     {
08616                     /*%%%*/
08617                         (yyval.node) = NEW_MASGN(0, NEW_POSTARG(-1, (yyvsp[(3) - (3)].node)));
08618                     /*%
08619                         $$ = mlhs_add_star(mlhs_new(), Qnil);
08620                     %*/
08621                     ;}
08622     break;
08623 
08624   case 360:
08625 
08626 /* Line 1464 of yacc.c  */
08627 #line 3274 "parse.y"
08628     {
08629                     /*%%%*/
08630                         (yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), (yyvsp[(5) - (6)].id), 0, (yyvsp[(6) - (6)].id));
08631                     /*%
08632                         $$ = params_new($1, $3, $5, Qnil, escape_Qundef($6));
08633                     %*/
08634                     ;}
08635     break;
08636 
08637   case 361:
08638 
08639 /* Line 1464 of yacc.c  */
08640 #line 3282 "parse.y"
08641     {
08642                     /*%%%*/
08643                         (yyval.node) = new_args((yyvsp[(1) - (8)].node), (yyvsp[(3) - (8)].node), (yyvsp[(5) - (8)].id), (yyvsp[(7) - (8)].node), (yyvsp[(8) - (8)].id));
08644                     /*%
08645                         $$ = params_new($1, $3, $5, $7, escape_Qundef($8));
08646                     %*/
08647                     ;}
08648     break;
08649 
08650   case 362:
08651 
08652 /* Line 1464 of yacc.c  */
08653 #line 3290 "parse.y"
08654     {
08655                     /*%%%*/
08656                         (yyval.node) = new_args((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node), 0, 0, (yyvsp[(4) - (4)].id));
08657                     /*%
08658                         $$ = params_new($1, $3, Qnil, Qnil, escape_Qundef($4));
08659                     %*/
08660                     ;}
08661     break;
08662 
08663   case 363:
08664 
08665 /* Line 1464 of yacc.c  */
08666 #line 3298 "parse.y"
08667     {
08668                     /*%%%*/
08669                         (yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), 0, (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].id));
08670                     /*%
08671                         $$ = params_new($1, $3, Qnil, $5, escape_Qundef($6));
08672                     %*/
08673                     ;}
08674     break;
08675 
08676   case 364:
08677 
08678 /* Line 1464 of yacc.c  */
08679 #line 3306 "parse.y"
08680     {
08681                     /*%%%*/
08682                         (yyval.node) = new_args((yyvsp[(1) - (4)].node), 0, (yyvsp[(3) - (4)].id), 0, (yyvsp[(4) - (4)].id));
08683                     /*%
08684                         $$ = params_new($1, Qnil, $3, Qnil, escape_Qundef($4));
08685                     %*/
08686                     ;}
08687     break;
08688 
08689   case 365:
08690 
08691 /* Line 1464 of yacc.c  */
08692 #line 3314 "parse.y"
08693     {
08694                     /*%%%*/
08695                         (yyval.node) = new_args((yyvsp[(1) - (2)].node), 0, 1, 0, 0);
08696                     /*%
08697                         $$ = params_new($1, Qnil, Qnil, Qnil, Qnil);
08698                         dispatch1(excessed_comma, $$);
08699                     %*/
08700                     ;}
08701     break;
08702 
08703   case 366:
08704 
08705 /* Line 1464 of yacc.c  */
08706 #line 3323 "parse.y"
08707     {
08708                     /*%%%*/
08709                         (yyval.node) = new_args((yyvsp[(1) - (6)].node), 0, (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].id));
08710                     /*%
08711                         $$ = params_new($1, Qnil, $3, $5, escape_Qundef($6));
08712                     %*/
08713                     ;}
08714     break;
08715 
08716   case 367:
08717 
08718 /* Line 1464 of yacc.c  */
08719 #line 3331 "parse.y"
08720     {
08721                     /*%%%*/
08722                         (yyval.node) = new_args((yyvsp[(1) - (2)].node), 0, 0, 0, (yyvsp[(2) - (2)].id));
08723                     /*%
08724                         $$ = params_new($1, Qnil,Qnil, Qnil, escape_Qundef($2));
08725                     %*/
08726                     ;}
08727     break;
08728 
08729   case 368:
08730 
08731 /* Line 1464 of yacc.c  */
08732 #line 3339 "parse.y"
08733     {
08734                     /*%%%*/
08735                         (yyval.node) = new_args(0, (yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), 0, (yyvsp[(4) - (4)].id));
08736                     /*%
08737                         $$ = params_new(Qnil, $1, $3, Qnil, escape_Qundef($4));
08738                     %*/
08739                     ;}
08740     break;
08741 
08742   case 369:
08743 
08744 /* Line 1464 of yacc.c  */
08745 #line 3347 "parse.y"
08746     {
08747                     /*%%%*/
08748                         (yyval.node) = new_args(0, (yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].id));
08749                     /*%
08750                         $$ = params_new(Qnil, $1, $3, $5, escape_Qundef($6));
08751                     %*/
08752                     ;}
08753     break;
08754 
08755   case 370:
08756 
08757 /* Line 1464 of yacc.c  */
08758 #line 3355 "parse.y"
08759     {
08760                     /*%%%*/
08761                         (yyval.node) = new_args(0, (yyvsp[(1) - (2)].node), 0, 0, (yyvsp[(2) - (2)].id));
08762                     /*%
08763                         $$ = params_new(Qnil, $1, Qnil, Qnil,escape_Qundef($2));
08764                     %*/
08765                     ;}
08766     break;
08767 
08768   case 371:
08769 
08770 /* Line 1464 of yacc.c  */
08771 #line 3363 "parse.y"
08772     {
08773                     /*%%%*/
08774                         (yyval.node) = new_args(0, (yyvsp[(1) - (4)].node), 0, (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].id));
08775                     /*%
08776                         $$ = params_new(Qnil, $1, Qnil, $3, escape_Qundef($4));
08777                     %*/
08778                     ;}
08779     break;
08780 
08781   case 372:
08782 
08783 /* Line 1464 of yacc.c  */
08784 #line 3371 "parse.y"
08785     {
08786                     /*%%%*/
08787                         (yyval.node) = new_args(0, 0, (yyvsp[(1) - (2)].id), 0, (yyvsp[(2) - (2)].id));
08788                     /*%
08789                         $$ = params_new(Qnil, Qnil, $1, Qnil, escape_Qundef($2));
08790                     %*/
08791                     ;}
08792     break;
08793 
08794   case 373:
08795 
08796 /* Line 1464 of yacc.c  */
08797 #line 3379 "parse.y"
08798     {
08799                     /*%%%*/
08800                         (yyval.node) = new_args(0, 0, (yyvsp[(1) - (4)].id), (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].id));
08801                     /*%
08802                         $$ = params_new(Qnil, Qnil, $1, $3, escape_Qundef($4));
08803                     %*/
08804                     ;}
08805     break;
08806 
08807   case 374:
08808 
08809 /* Line 1464 of yacc.c  */
08810 #line 3387 "parse.y"
08811     {
08812                     /*%%%*/
08813                         (yyval.node) = new_args(0, 0, 0, 0, (yyvsp[(1) - (1)].id));
08814                     /*%
08815                         $$ = params_new(Qnil, Qnil, Qnil, Qnil, $1);
08816                     %*/
08817                     ;}
08818     break;
08819 
08820   case 376:
08821 
08822 /* Line 1464 of yacc.c  */
08823 #line 3398 "parse.y"
08824     {
08825                         command_start = TRUE;
08826                     ;}
08827     break;
08828 
08829   case 377:
08830 
08831 /* Line 1464 of yacc.c  */
08832 #line 3404 "parse.y"
08833     {
08834                     /*%%%*/
08835                         (yyval.node) = 0;
08836                     /*%
08837                         $$ = blockvar_new(params_new(Qnil,Qnil,Qnil,Qnil,Qnil),
08838                                           escape_Qundef($2));
08839                     %*/
08840                     ;}
08841     break;
08842 
08843   case 378:
08844 
08845 /* Line 1464 of yacc.c  */
08846 #line 3413 "parse.y"
08847     {
08848                     /*%%%*/
08849                         (yyval.node) = 0;
08850                     /*%
08851                         $$ = blockvar_new(params_new(Qnil,Qnil,Qnil,Qnil,Qnil),
08852                                           Qnil);
08853                     %*/
08854                     ;}
08855     break;
08856 
08857   case 379:
08858 
08859 /* Line 1464 of yacc.c  */
08860 #line 3422 "parse.y"
08861     {
08862                     /*%%%*/
08863                         (yyval.node) = (yyvsp[(2) - (4)].node);
08864                     /*%
08865                         $$ = blockvar_new(escape_Qundef($2), escape_Qundef($3));
08866                     %*/
08867                     ;}
08868     break;
08869 
08870   case 381:
08871 
08872 /* Line 1464 of yacc.c  */
08873 #line 3434 "parse.y"
08874     {
08875                     /*%%%*/
08876                         (yyval.node) = 0;
08877                     /*%
08878                         $$ = $2;
08879                     %*/
08880                     ;}
08881     break;
08882 
08883   case 384:
08884 
08885 /* Line 1464 of yacc.c  */
08886 #line 3460 "parse.y"
08887     {
08888                         new_bv(get_id((yyvsp[(1) - (1)].id)));
08889                     /*%%%*/
08890                     /*%
08891                         $$ = get_value($1);
08892                     %*/
08893                     ;}
08894     break;
08895 
08896   case 385:
08897 
08898 /* Line 1464 of yacc.c  */
08899 #line 3468 "parse.y"
08900     {
08901                         (yyval.node) = 0;
08902                     ;}
08903     break;
08904 
08905   case 386:
08906 
08907 /* Line 1464 of yacc.c  */
08908 #line 3473 "parse.y"
08909     {
08910                         (yyval.vars) = dyna_push();
08911                     ;}
08912     break;
08913 
08914   case 387:
08915 
08916 /* Line 1464 of yacc.c  */
08917 #line 3476 "parse.y"
08918     {
08919                         (yyval.num) = lpar_beg;
08920                         lpar_beg = ++paren_nest;
08921                     ;}
08922     break;
08923 
08924   case 388:
08925 
08926 /* Line 1464 of yacc.c  */
08927 #line 3482 "parse.y"
08928     {
08929                         lpar_beg = (yyvsp[(2) - (4)].num);
08930                     /*%%%*/
08931                         (yyval.node) = (yyvsp[(3) - (4)].node);
08932                         (yyval.node)->nd_body = NEW_SCOPE((yyvsp[(3) - (4)].node)->nd_head, (yyvsp[(4) - (4)].node));
08933                     /*%
08934                         $$ = dispatch2(lambda, $3, $4);
08935                     %*/
08936                         dyna_pop((yyvsp[(1) - (4)].vars));
08937                     ;}
08938     break;
08939 
08940   case 389:
08941 
08942 /* Line 1464 of yacc.c  */
08943 #line 3495 "parse.y"
08944     {
08945                     /*%%%*/
08946                         (yyval.node) = NEW_LAMBDA((yyvsp[(2) - (4)].node));
08947                     /*%
08948                         $$ = dispatch1(paren, $2);
08949                     %*/
08950                     ;}
08951     break;
08952 
08953   case 390:
08954 
08955 /* Line 1464 of yacc.c  */
08956 #line 3503 "parse.y"
08957     {
08958                     /*%%%*/
08959                         (yyval.node) = NEW_LAMBDA((yyvsp[(1) - (1)].node));
08960                     /*%
08961                         $$ = $1;
08962                     %*/
08963                     ;}
08964     break;
08965 
08966   case 391:
08967 
08968 /* Line 1464 of yacc.c  */
08969 #line 3513 "parse.y"
08970     {
08971                         (yyval.node) = (yyvsp[(2) - (3)].node);
08972                     ;}
08973     break;
08974 
08975   case 392:
08976 
08977 /* Line 1464 of yacc.c  */
08978 #line 3517 "parse.y"
08979     {
08980                         (yyval.node) = (yyvsp[(2) - (3)].node);
08981                     ;}
08982     break;
08983 
08984   case 393:
08985 
08986 /* Line 1464 of yacc.c  */
08987 #line 3523 "parse.y"
08988     {
08989                         (yyvsp[(1) - (1)].vars) = dyna_push();
08990                     /*%%%*/
08991                         (yyval.num) = ruby_sourceline;
08992                     /*% %*/
08993                     ;}
08994     break;
08995 
08996   case 394:
08997 
08998 /* Line 1464 of yacc.c  */
08999 #line 3532 "parse.y"
09000     {
09001                     /*%%%*/
09002                         (yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node));
09003                         nd_set_line((yyval.node), (yyvsp[(2) - (5)].num));
09004                     /*%
09005                         $$ = dispatch2(do_block, escape_Qundef($3), $4);
09006                     %*/
09007                         dyna_pop((yyvsp[(1) - (5)].vars));
09008                     ;}
09009     break;
09010 
09011   case 395:
09012 
09013 /* Line 1464 of yacc.c  */
09014 #line 3544 "parse.y"
09015     {
09016                     /*%%%*/
09017                         if (nd_type((yyvsp[(1) - (2)].node)) == NODE_YIELD) {
09018                             compile_error(PARSER_ARG "block given to yield");
09019                         }
09020                         else {
09021                             block_dup_check((yyvsp[(1) - (2)].node)->nd_args, (yyvsp[(2) - (2)].node));
09022                         }
09023                         (yyvsp[(2) - (2)].node)->nd_iter = (yyvsp[(1) - (2)].node);
09024                         (yyval.node) = (yyvsp[(2) - (2)].node);
09025                         fixpos((yyval.node), (yyvsp[(1) - (2)].node));
09026                     /*%
09027                         $$ = method_add_block($1, $2);
09028                     %*/
09029                     ;}
09030     break;
09031 
09032   case 396:
09033 
09034 /* Line 1464 of yacc.c  */
09035 #line 3560 "parse.y"
09036     {
09037                     /*%%%*/
09038                         (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
09039                     /*%
09040                         $$ = dispatch3(call, $1, ripper_id2sym('.'), $3);
09041                         $$ = method_optarg($$, $4);
09042                     %*/
09043                     ;}
09044     break;
09045 
09046   case 397:
09047 
09048 /* Line 1464 of yacc.c  */
09049 #line 3569 "parse.y"
09050     {
09051                     /*%%%*/
09052                         (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
09053                     /*%
09054                         $$ = dispatch3(call, $1, ripper_intern("::"), $3);
09055                         $$ = method_optarg($$, $4);
09056                     %*/
09057                     ;}
09058     break;
09059 
09060   case 398:
09061 
09062 /* Line 1464 of yacc.c  */
09063 #line 3580 "parse.y"
09064     {
09065                     /*%%%*/
09066                         (yyval.node) = NEW_FCALL((yyvsp[(1) - (2)].id), (yyvsp[(2) - (2)].node));
09067                         fixpos((yyval.node), (yyvsp[(2) - (2)].node));
09068                     /*%
09069                         $$ = method_arg(dispatch1(fcall, $1), $2);
09070                     %*/
09071                     ;}
09072     break;
09073 
09074   case 399:
09075 
09076 /* Line 1464 of yacc.c  */
09077 #line 3589 "parse.y"
09078     {
09079                     /*%%%*/
09080                         (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
09081                         fixpos((yyval.node), (yyvsp[(1) - (4)].node));
09082                     /*%
09083                         $$ = dispatch3(call, $1, ripper_id2sym('.'), $3);
09084                         $$ = method_optarg($$, $4);
09085                     %*/
09086                     ;}
09087     break;
09088 
09089   case 400:
09090 
09091 /* Line 1464 of yacc.c  */
09092 #line 3599 "parse.y"
09093     {
09094                     /*%%%*/
09095                         (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
09096                         fixpos((yyval.node), (yyvsp[(1) - (4)].node));
09097                     /*%
09098                         $$ = dispatch3(call, $1, ripper_id2sym('.'), $3);
09099                         $$ = method_optarg($$, $4);
09100                     %*/
09101                     ;}
09102     break;
09103 
09104   case 401:
09105 
09106 /* Line 1464 of yacc.c  */
09107 #line 3609 "parse.y"
09108     {
09109                     /*%%%*/
09110                         (yyval.node) = NEW_CALL((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id), 0);
09111                     /*%
09112                         $$ = dispatch3(call, $1, ripper_intern("::"), $3);
09113                     %*/
09114                     ;}
09115     break;
09116 
09117   case 402:
09118 
09119 /* Line 1464 of yacc.c  */
09120 #line 3617 "parse.y"
09121     {
09122                     /*%%%*/
09123                         (yyval.node) = NEW_CALL((yyvsp[(1) - (3)].node), rb_intern("call"), (yyvsp[(3) - (3)].node));
09124                         fixpos((yyval.node), (yyvsp[(1) - (3)].node));
09125                     /*%
09126                         $$ = dispatch3(call, $1, ripper_id2sym('.'),
09127                                        ripper_intern("call"));
09128                         $$ = method_optarg($$, $3);
09129                     %*/
09130                     ;}
09131     break;
09132 
09133   case 403:
09134 
09135 /* Line 1464 of yacc.c  */
09136 #line 3628 "parse.y"
09137     {
09138                     /*%%%*/
09139                         (yyval.node) = NEW_CALL((yyvsp[(1) - (3)].node), rb_intern("call"), (yyvsp[(3) - (3)].node));
09140                         fixpos((yyval.node), (yyvsp[(1) - (3)].node));
09141                     /*%
09142                         $$ = dispatch3(call, $1, ripper_intern("::"),
09143                                        ripper_intern("call"));
09144                         $$ = method_optarg($$, $3);
09145                     %*/
09146                     ;}
09147     break;
09148 
09149   case 404:
09150 
09151 /* Line 1464 of yacc.c  */
09152 #line 3639 "parse.y"
09153     {
09154                     /*%%%*/
09155                         (yyval.node) = NEW_SUPER((yyvsp[(2) - (2)].node));
09156                     /*%
09157                         $$ = dispatch1(super, $2);
09158                     %*/
09159                     ;}
09160     break;
09161 
09162   case 405:
09163 
09164 /* Line 1464 of yacc.c  */
09165 #line 3647 "parse.y"
09166     {
09167                     /*%%%*/
09168                         (yyval.node) = NEW_ZSUPER();
09169                     /*%
09170                         $$ = dispatch0(zsuper);
09171                     %*/
09172                     ;}
09173     break;
09174 
09175   case 406:
09176 
09177 /* Line 1464 of yacc.c  */
09178 #line 3655 "parse.y"
09179     {
09180                     /*%%%*/
09181                         if ((yyvsp[(1) - (4)].node) && nd_type((yyvsp[(1) - (4)].node)) == NODE_SELF)
09182                             (yyval.node) = NEW_FCALL(tAREF, (yyvsp[(3) - (4)].node));
09183                         else
09184                             (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), tAREF, (yyvsp[(3) - (4)].node));
09185                         fixpos((yyval.node), (yyvsp[(1) - (4)].node));
09186                     /*%
09187                         $$ = dispatch2(aref, $1, escape_Qundef($3));
09188                     %*/
09189                     ;}
09190     break;
09191 
09192   case 407:
09193 
09194 /* Line 1464 of yacc.c  */
09195 #line 3669 "parse.y"
09196     {
09197                         (yyvsp[(1) - (1)].vars) = dyna_push();
09198                     /*%%%*/
09199                         (yyval.num) = ruby_sourceline;
09200                     /*%
09201                     %*/
09202                     ;}
09203     break;
09204 
09205   case 408:
09206 
09207 /* Line 1464 of yacc.c  */
09208 #line 3678 "parse.y"
09209     {
09210                     /*%%%*/
09211                         (yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node));
09212                         nd_set_line((yyval.node), (yyvsp[(2) - (5)].num));
09213                     /*%
09214                         $$ = dispatch2(brace_block, escape_Qundef($3), $4);
09215                     %*/
09216                         dyna_pop((yyvsp[(1) - (5)].vars));
09217                     ;}
09218     break;
09219 
09220   case 409:
09221 
09222 /* Line 1464 of yacc.c  */
09223 #line 3688 "parse.y"
09224     {
09225                         (yyvsp[(1) - (1)].vars) = dyna_push();
09226                     /*%%%*/
09227                         (yyval.num) = ruby_sourceline;
09228                     /*%
09229                     %*/
09230                     ;}
09231     break;
09232 
09233   case 410:
09234 
09235 /* Line 1464 of yacc.c  */
09236 #line 3697 "parse.y"
09237     {
09238                     /*%%%*/
09239                         (yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node));
09240                         nd_set_line((yyval.node), (yyvsp[(2) - (5)].num));
09241                     /*%
09242                         $$ = dispatch2(do_block, escape_Qundef($3), $4);
09243                     %*/
09244                         dyna_pop((yyvsp[(1) - (5)].vars));
09245                     ;}
09246     break;
09247 
09248   case 411:
09249 
09250 /* Line 1464 of yacc.c  */
09251 #line 3711 "parse.y"
09252     {
09253                     /*%%%*/
09254                         (yyval.node) = NEW_WHEN((yyvsp[(2) - (5)].node), (yyvsp[(4) - (5)].node), (yyvsp[(5) - (5)].node));
09255                     /*%
09256                         $$ = dispatch3(when, $2, $4, escape_Qundef($5));
09257                     %*/
09258                     ;}
09259     break;
09260 
09261   case 414:
09262 
09263 /* Line 1464 of yacc.c  */
09264 #line 3727 "parse.y"
09265     {
09266                     /*%%%*/
09267                         if ((yyvsp[(3) - (6)].node)) {
09268                             (yyvsp[(3) - (6)].node) = node_assign((yyvsp[(3) - (6)].node), NEW_ERRINFO());
09269                             (yyvsp[(5) - (6)].node) = block_append((yyvsp[(3) - (6)].node), (yyvsp[(5) - (6)].node));
09270                         }
09271                         (yyval.node) = NEW_RESBODY((yyvsp[(2) - (6)].node), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].node));
09272                         fixpos((yyval.node), (yyvsp[(2) - (6)].node)?(yyvsp[(2) - (6)].node):(yyvsp[(5) - (6)].node));
09273                     /*%
09274                         $$ = dispatch4(rescue,
09275                                        escape_Qundef($2),
09276                                        escape_Qundef($3),
09277                                        escape_Qundef($5),
09278                                        escape_Qundef($6));
09279                     %*/
09280                     ;}
09281     break;
09282 
09283   case 416:
09284 
09285 /* Line 1464 of yacc.c  */
09286 #line 3747 "parse.y"
09287     {
09288                     /*%%%*/
09289                         (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
09290                     /*%
09291                         $$ = rb_ary_new3(1, $1);
09292                     %*/
09293                     ;}
09294     break;
09295 
09296   case 417:
09297 
09298 /* Line 1464 of yacc.c  */
09299 #line 3755 "parse.y"
09300     {
09301                     /*%%%*/
09302                         if (!((yyval.node) = splat_array((yyvsp[(1) - (1)].node)))) (yyval.node) = (yyvsp[(1) - (1)].node);
09303                     /*%
09304                         $$ = $1;
09305                     %*/
09306                     ;}
09307     break;
09308 
09309   case 419:
09310 
09311 /* Line 1464 of yacc.c  */
09312 #line 3766 "parse.y"
09313     {
09314                         (yyval.node) = (yyvsp[(2) - (2)].node);
09315                     ;}
09316     break;
09317 
09318   case 421:
09319 
09320 /* Line 1464 of yacc.c  */
09321 #line 3773 "parse.y"
09322     {
09323                     /*%%%*/
09324                         (yyval.node) = (yyvsp[(2) - (2)].node);
09325                     /*%
09326                         $$ = dispatch1(ensure, $2);
09327                     %*/
09328                     ;}
09329     break;
09330 
09331   case 424:
09332 
09333 /* Line 1464 of yacc.c  */
09334 #line 3785 "parse.y"
09335     {
09336                     /*%%%*/
09337                         (yyval.node) = NEW_LIT(ID2SYM((yyvsp[(1) - (1)].id)));
09338                     /*%
09339                         $$ = dispatch1(symbol_literal, $1);
09340                     %*/
09341                     ;}
09342     break;
09343 
09344   case 426:
09345 
09346 /* Line 1464 of yacc.c  */
09347 #line 3796 "parse.y"
09348     {
09349                     /*%%%*/
09350                         NODE *node = (yyvsp[(1) - (1)].node);
09351                         if (!node) {
09352                             node = NEW_STR(STR_NEW0());
09353                         }
09354                         else {
09355                             node = evstr2dstr(node);
09356                         }
09357                         (yyval.node) = node;
09358                     /*%
09359                         $$ = $1;
09360                     %*/
09361                     ;}
09362     break;
09363 
09364   case 429:
09365 
09366 /* Line 1464 of yacc.c  */
09367 #line 3815 "parse.y"
09368     {
09369                     /*%%%*/
09370                         (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
09371                     /*%
09372                         $$ = dispatch2(string_concat, $1, $2);
09373                     %*/
09374                     ;}
09375     break;
09376 
09377   case 430:
09378 
09379 /* Line 1464 of yacc.c  */
09380 #line 3825 "parse.y"
09381     {
09382                     /*%%%*/
09383                         (yyval.node) = (yyvsp[(2) - (3)].node);
09384                     /*%
09385                         $$ = dispatch1(string_literal, $2);
09386                     %*/
09387                     ;}
09388     break;
09389 
09390   case 431:
09391 
09392 /* Line 1464 of yacc.c  */
09393 #line 3835 "parse.y"
09394     {
09395                     /*%%%*/
09396                         NODE *node = (yyvsp[(2) - (3)].node);
09397                         if (!node) {
09398                             node = NEW_XSTR(STR_NEW0());
09399                         }
09400                         else {
09401                             switch (nd_type(node)) {
09402                               case NODE_STR:
09403                                 nd_set_type(node, NODE_XSTR);
09404                                 break;
09405                               case NODE_DSTR:
09406                                 nd_set_type(node, NODE_DXSTR);
09407                                 break;
09408                               default:
09409                                 node = NEW_NODE(NODE_DXSTR, Qnil, 1, NEW_LIST(node));
09410                                 break;
09411                             }
09412                         }
09413                         (yyval.node) = node;
09414                     /*%
09415                         $$ = dispatch1(xstring_literal, $2);
09416                     %*/
09417                     ;}
09418     break;
09419 
09420   case 432:
09421 
09422 /* Line 1464 of yacc.c  */
09423 #line 3862 "parse.y"
09424     {
09425                     /*%%%*/
09426                         int options = (yyvsp[(3) - (3)].num);
09427                         NODE *node = (yyvsp[(2) - (3)].node);
09428                         NODE *list, *prev;
09429                         if (!node) {
09430                             node = NEW_LIT(reg_compile(STR_NEW0(), options));
09431                         }
09432                         else switch (nd_type(node)) {
09433                           case NODE_STR:
09434                             {
09435                                 VALUE src = node->nd_lit;
09436                                 nd_set_type(node, NODE_LIT);
09437                                 node->nd_lit = reg_compile(src, options);
09438                             }
09439                             break;
09440                           default:
09441                             node = NEW_NODE(NODE_DSTR, STR_NEW0(), 1, NEW_LIST(node));
09442                           case NODE_DSTR:
09443                             if (options & RE_OPTION_ONCE) {
09444                                 nd_set_type(node, NODE_DREGX_ONCE);
09445                             }
09446                             else {
09447                                 nd_set_type(node, NODE_DREGX);
09448                             }
09449                             node->nd_cflag = options & RE_OPTION_MASK;
09450                             if (!NIL_P(node->nd_lit)) reg_fragment_check(node->nd_lit, options);
09451                             for (list = (prev = node)->nd_next; list; list = list->nd_next) {
09452                                 if (nd_type(list->nd_head) == NODE_STR) {
09453                                     VALUE tail = list->nd_head->nd_lit;
09454                                     if (reg_fragment_check(tail, options) && prev && !NIL_P(prev->nd_lit)) {
09455                                         if (!literal_concat0(parser, prev->nd_lit, tail)) {
09456                                             node = 0;
09457                                             break;
09458                                         }
09459                                         rb_str_resize(tail, 0);
09460                                         prev->nd_next = list->nd_next;
09461                                         rb_gc_force_recycle((VALUE)list->nd_head);
09462                                         rb_gc_force_recycle((VALUE)list);
09463                                         list = prev;
09464                                     }
09465                                     else {
09466                                         prev = list;
09467                                     }
09468                                 }
09469                                 else {
09470                                     prev = 0;
09471                                 }
09472                             }
09473                             if (!node->nd_next) {
09474                                 VALUE src = node->nd_lit;
09475                                 nd_set_type(node, NODE_LIT);
09476                                 node->nd_lit = reg_compile(src, options);
09477                             }
09478                             break;
09479                         }
09480                         (yyval.node) = node;
09481                     /*%
09482                         $$ = dispatch2(regexp_literal, $2, $3);
09483                     %*/
09484                     ;}
09485     break;
09486 
09487   case 433:
09488 
09489 /* Line 1464 of yacc.c  */
09490 #line 3926 "parse.y"
09491     {
09492                     /*%%%*/
09493                         (yyval.node) = NEW_ZARRAY();
09494                     /*%
09495                         $$ = dispatch0(words_new);
09496                     %*/
09497                     ;}
09498     break;
09499 
09500   case 434:
09501 
09502 /* Line 1464 of yacc.c  */
09503 #line 3934 "parse.y"
09504     {
09505                         (yyval.node) = (yyvsp[(2) - (3)].node);
09506                     ;}
09507     break;
09508 
09509   case 435:
09510 
09511 /* Line 1464 of yacc.c  */
09512 #line 3940 "parse.y"
09513     {
09514                     /*%%%*/
09515                         (yyval.node) = 0;
09516                     /*%
09517                         $$ = dispatch0(words_new);
09518                     %*/
09519                     ;}
09520     break;
09521 
09522   case 436:
09523 
09524 /* Line 1464 of yacc.c  */
09525 #line 3948 "parse.y"
09526     {
09527                     /*%%%*/
09528                         (yyval.node) = list_append((yyvsp[(1) - (3)].node), evstr2dstr((yyvsp[(2) - (3)].node)));
09529                     /*%
09530                         $$ = dispatch2(words_add, $1, $2);
09531                     %*/
09532                     ;}
09533     break;
09534 
09535   case 438:
09536 
09537 /* Line 1464 of yacc.c  */
09538 #line 3966 "parse.y"
09539     {
09540                     /*%%%*/
09541                         (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
09542                     /*%
09543                         $$ = dispatch2(word_add, $1, $2);
09544                     %*/
09545                     ;}
09546     break;
09547 
09548   case 439:
09549 
09550 /* Line 1464 of yacc.c  */
09551 #line 3976 "parse.y"
09552     {
09553                     /*%%%*/
09554                         (yyval.node) = NEW_ZARRAY();
09555                     /*%
09556                         $$ = dispatch0(qwords_new);
09557                     %*/
09558                     ;}
09559     break;
09560 
09561   case 440:
09562 
09563 /* Line 1464 of yacc.c  */
09564 #line 3984 "parse.y"
09565     {
09566                         (yyval.node) = (yyvsp[(2) - (3)].node);
09567                     ;}
09568     break;
09569 
09570   case 441:
09571 
09572 /* Line 1464 of yacc.c  */
09573 #line 3990 "parse.y"
09574     {
09575                     /*%%%*/
09576                         (yyval.node) = 0;
09577                     /*%
09578                         $$ = dispatch0(qwords_new);
09579                     %*/
09580                     ;}
09581     break;
09582 
09583   case 442:
09584 
09585 /* Line 1464 of yacc.c  */
09586 #line 3998 "parse.y"
09587     {
09588                     /*%%%*/
09589                         (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].node));
09590                     /*%
09591                         $$ = dispatch2(qwords_add, $1, $2);
09592                     %*/
09593                     ;}
09594     break;
09595 
09596   case 443:
09597 
09598 /* Line 1464 of yacc.c  */
09599 #line 4008 "parse.y"
09600     {
09601                     /*%%%*/
09602                         (yyval.node) = 0;
09603                     /*%
09604                         $$ = dispatch0(string_content);
09605                     %*/
09606                     ;}
09607     break;
09608 
09609   case 444:
09610 
09611 /* Line 1464 of yacc.c  */
09612 #line 4016 "parse.y"
09613     {
09614                     /*%%%*/
09615                         (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
09616                     /*%
09617                         $$ = dispatch2(string_add, $1, $2);
09618                     %*/
09619                     ;}
09620     break;
09621 
09622   case 445:
09623 
09624 /* Line 1464 of yacc.c  */
09625 #line 4026 "parse.y"
09626     {
09627                     /*%%%*/
09628                         (yyval.node) = 0;
09629                     /*%
09630                         $$ = dispatch0(xstring_new);
09631                     %*/
09632                     ;}
09633     break;
09634 
09635   case 446:
09636 
09637 /* Line 1464 of yacc.c  */
09638 #line 4034 "parse.y"
09639     {
09640                     /*%%%*/
09641                         (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
09642                     /*%
09643                         $$ = dispatch2(xstring_add, $1, $2);
09644                     %*/
09645                     ;}
09646     break;
09647 
09648   case 447:
09649 
09650 /* Line 1464 of yacc.c  */
09651 #line 4044 "parse.y"
09652     {
09653                     /*%%%*/
09654                         (yyval.node) = 0;
09655                     /*%
09656                         $$ = dispatch0(regexp_new);
09657                     %*/
09658                     ;}
09659     break;
09660 
09661   case 448:
09662 
09663 /* Line 1464 of yacc.c  */
09664 #line 4052 "parse.y"
09665     {
09666                     /*%%%*/
09667                         NODE *head = (yyvsp[(1) - (2)].node), *tail = (yyvsp[(2) - (2)].node);
09668                         if (!head) {
09669                             (yyval.node) = tail;
09670                         }
09671                         else if (!tail) {
09672                             (yyval.node) = head;
09673                         }
09674                         else {
09675                             switch (nd_type(head)) {
09676                               case NODE_STR:
09677                                 nd_set_type(head, NODE_DSTR);
09678                                 break;
09679                               case NODE_DSTR:
09680                                 break;
09681                               default:
09682                                 head = list_append(NEW_DSTR(Qnil), head);
09683                                 break;
09684                             }
09685                             (yyval.node) = list_append(head, tail);
09686                         }
09687                     /*%
09688                         $$ = dispatch2(regexp_add, $1, $2);
09689                     %*/
09690                     ;}
09691     break;
09692 
09693   case 450:
09694 
09695 /* Line 1464 of yacc.c  */
09696 #line 4082 "parse.y"
09697     {
09698                         (yyval.node) = lex_strterm;
09699                         lex_strterm = 0;
09700                         lex_state = EXPR_BEG;
09701                     ;}
09702     break;
09703 
09704   case 451:
09705 
09706 /* Line 1464 of yacc.c  */
09707 #line 4088 "parse.y"
09708     {
09709                     /*%%%*/
09710                         lex_strterm = (yyvsp[(2) - (3)].node);
09711                         (yyval.node) = NEW_EVSTR((yyvsp[(3) - (3)].node));
09712                     /*%
09713                         lex_strterm = $<node>2;
09714                         $$ = dispatch1(string_dvar, $3);
09715                     %*/
09716                     ;}
09717     break;
09718 
09719   case 452:
09720 
09721 /* Line 1464 of yacc.c  */
09722 #line 4098 "parse.y"
09723     {
09724                         (yyvsp[(1) - (1)].val) = cond_stack;
09725                         (yyval.val) = cmdarg_stack;
09726                         cond_stack = 0;
09727                         cmdarg_stack = 0;
09728                     ;}
09729     break;
09730 
09731   case 453:
09732 
09733 /* Line 1464 of yacc.c  */
09734 #line 4104 "parse.y"
09735     {
09736                         (yyval.node) = lex_strterm;
09737                         lex_strterm = 0;
09738                         lex_state = EXPR_BEG;
09739                     ;}
09740     break;
09741 
09742   case 454:
09743 
09744 /* Line 1464 of yacc.c  */
09745 #line 4110 "parse.y"
09746     {
09747                         cond_stack = (yyvsp[(1) - (5)].val);
09748                         cmdarg_stack = (yyvsp[(2) - (5)].val);
09749                         lex_strterm = (yyvsp[(3) - (5)].node);
09750                     /*%%%*/
09751                         if ((yyvsp[(4) - (5)].node)) (yyvsp[(4) - (5)].node)->flags &= ~NODE_FL_NEWLINE;
09752                         (yyval.node) = new_evstr((yyvsp[(4) - (5)].node));
09753                     /*%
09754                         $$ = dispatch1(string_embexpr, $4);
09755                     %*/
09756                     ;}
09757     break;
09758 
09759   case 455:
09760 
09761 /* Line 1464 of yacc.c  */
09762 #line 4124 "parse.y"
09763     {
09764                     /*%%%*/
09765                         (yyval.node) = NEW_GVAR((yyvsp[(1) - (1)].id));
09766                     /*%
09767                         $$ = dispatch1(var_ref, $1);
09768                     %*/
09769                     ;}
09770     break;
09771 
09772   case 456:
09773 
09774 /* Line 1464 of yacc.c  */
09775 #line 4132 "parse.y"
09776     {
09777                     /*%%%*/
09778                         (yyval.node) = NEW_IVAR((yyvsp[(1) - (1)].id));
09779                     /*%
09780                         $$ = dispatch1(var_ref, $1);
09781                     %*/
09782                     ;}
09783     break;
09784 
09785   case 457:
09786 
09787 /* Line 1464 of yacc.c  */
09788 #line 4140 "parse.y"
09789     {
09790                     /*%%%*/
09791                         (yyval.node) = NEW_CVAR((yyvsp[(1) - (1)].id));
09792                     /*%
09793                         $$ = dispatch1(var_ref, $1);
09794                     %*/
09795                     ;}
09796     break;
09797 
09798   case 459:
09799 
09800 /* Line 1464 of yacc.c  */
09801 #line 4151 "parse.y"
09802     {
09803                         lex_state = EXPR_END;
09804                     /*%%%*/
09805                         (yyval.id) = (yyvsp[(2) - (2)].id);
09806                     /*%
09807                         $$ = dispatch1(symbol, $2);
09808                     %*/
09809                     ;}
09810     break;
09811 
09812   case 464:
09813 
09814 /* Line 1464 of yacc.c  */
09815 #line 4168 "parse.y"
09816     {
09817                         lex_state = EXPR_END;
09818                     /*%%%*/
09819                         if (!((yyval.node) = (yyvsp[(2) - (3)].node))) {
09820                             (yyval.node) = NEW_LIT(ID2SYM(rb_intern("")));
09821                         }
09822                         else {
09823                             VALUE lit;
09824 
09825                             switch (nd_type((yyval.node))) {
09826                               case NODE_DSTR:
09827                                 nd_set_type((yyval.node), NODE_DSYM);
09828                                 break;
09829                               case NODE_STR:
09830                                 lit = (yyval.node)->nd_lit;
09831                                 (yyval.node)->nd_lit = ID2SYM(rb_intern_str(lit));
09832                                 nd_set_type((yyval.node), NODE_LIT);
09833                                 break;
09834                               default:
09835                                 (yyval.node) = NEW_NODE(NODE_DSYM, Qnil, 1, NEW_LIST((yyval.node)));
09836                                 break;
09837                             }
09838                         }
09839                     /*%
09840                         $$ = dispatch1(dyna_symbol, $2);
09841                     %*/
09842                     ;}
09843     break;
09844 
09845   case 467:
09846 
09847 /* Line 1464 of yacc.c  */
09848 #line 4200 "parse.y"
09849     {
09850                     /*%%%*/
09851                         (yyval.node) = negate_lit((yyvsp[(2) - (2)].node));
09852                     /*%
09853                         $$ = dispatch2(unary, ripper_intern("-@"), $2);
09854                     %*/
09855                     ;}
09856     break;
09857 
09858   case 468:
09859 
09860 /* Line 1464 of yacc.c  */
09861 #line 4208 "parse.y"
09862     {
09863                     /*%%%*/
09864                         (yyval.node) = negate_lit((yyvsp[(2) - (2)].node));
09865                     /*%
09866                         $$ = dispatch2(unary, ripper_intern("-@"), $2);
09867                     %*/
09868                     ;}
09869     break;
09870 
09871   case 474:
09872 
09873 /* Line 1464 of yacc.c  */
09874 #line 4222 "parse.y"
09875     {ifndef_ripper((yyval.id) = keyword_nil);;}
09876     break;
09877 
09878   case 475:
09879 
09880 /* Line 1464 of yacc.c  */
09881 #line 4223 "parse.y"
09882     {ifndef_ripper((yyval.id) = keyword_self);;}
09883     break;
09884 
09885   case 476:
09886 
09887 /* Line 1464 of yacc.c  */
09888 #line 4224 "parse.y"
09889     {ifndef_ripper((yyval.id) = keyword_true);;}
09890     break;
09891 
09892   case 477:
09893 
09894 /* Line 1464 of yacc.c  */
09895 #line 4225 "parse.y"
09896     {ifndef_ripper((yyval.id) = keyword_false);;}
09897     break;
09898 
09899   case 478:
09900 
09901 /* Line 1464 of yacc.c  */
09902 #line 4226 "parse.y"
09903     {ifndef_ripper((yyval.id) = keyword__FILE__);;}
09904     break;
09905 
09906   case 479:
09907 
09908 /* Line 1464 of yacc.c  */
09909 #line 4227 "parse.y"
09910     {ifndef_ripper((yyval.id) = keyword__LINE__);;}
09911     break;
09912 
09913   case 480:
09914 
09915 /* Line 1464 of yacc.c  */
09916 #line 4228 "parse.y"
09917     {ifndef_ripper((yyval.id) = keyword__ENCODING__);;}
09918     break;
09919 
09920   case 481:
09921 
09922 /* Line 1464 of yacc.c  */
09923 #line 4232 "parse.y"
09924     {
09925                     /*%%%*/
09926                         if (!((yyval.node) = gettable((yyvsp[(1) - (1)].id)))) (yyval.node) = NEW_BEGIN(0);
09927                     /*%
09928                         $$ = dispatch1(var_ref, $1);
09929                     %*/
09930                     ;}
09931     break;
09932 
09933   case 482:
09934 
09935 /* Line 1464 of yacc.c  */
09936 #line 4242 "parse.y"
09937     {
09938                         (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
09939                     /*%%%*/
09940                     /*%
09941                         $$ = dispatch1(var_field, $$);
09942                     %*/
09943                     ;}
09944     break;
09945 
09946   case 485:
09947 
09948 /* Line 1464 of yacc.c  */
09949 #line 4256 "parse.y"
09950     {
09951                     /*%%%*/
09952                         (yyval.node) = 0;
09953                     /*%
09954                         $$ = Qnil;
09955                     %*/
09956                     ;}
09957     break;
09958 
09959   case 486:
09960 
09961 /* Line 1464 of yacc.c  */
09962 #line 4264 "parse.y"
09963     {
09964                         lex_state = EXPR_BEG;
09965                     ;}
09966     break;
09967 
09968   case 487:
09969 
09970 /* Line 1464 of yacc.c  */
09971 #line 4268 "parse.y"
09972     {
09973                         (yyval.node) = (yyvsp[(3) - (4)].node);
09974                     ;}
09975     break;
09976 
09977   case 488:
09978 
09979 /* Line 1464 of yacc.c  */
09980 #line 4272 "parse.y"
09981     {
09982                     /*%%%*/
09983                         yyerrok;
09984                         (yyval.node) = 0;
09985                     /*%
09986                         yyerrok;
09987                         $$ = Qnil;
09988                     %*/
09989                     ;}
09990     break;
09991 
09992   case 489:
09993 
09994 /* Line 1464 of yacc.c  */
09995 #line 4284 "parse.y"
09996     {
09997                     /*%%%*/
09998                         (yyval.node) = (yyvsp[(2) - (3)].node);
09999                     /*%
10000                         $$ = dispatch1(paren, $2);
10001                     %*/
10002                         lex_state = EXPR_BEG;
10003                         command_start = TRUE;
10004                     ;}
10005     break;
10006 
10007   case 490:
10008 
10009 /* Line 1464 of yacc.c  */
10010 #line 4294 "parse.y"
10011     {
10012                         (yyval.node) = (yyvsp[(1) - (2)].node);
10013                     ;}
10014     break;
10015 
10016   case 491:
10017 
10018 /* Line 1464 of yacc.c  */
10019 #line 4300 "parse.y"
10020     {
10021                     /*%%%*/
10022                         (yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), (yyvsp[(5) - (6)].id), 0, (yyvsp[(6) - (6)].id));
10023                     /*%
10024                         $$ = params_new($1, $3, $5, Qnil, escape_Qundef($6));
10025                     %*/
10026                     ;}
10027     break;
10028 
10029   case 492:
10030 
10031 /* Line 1464 of yacc.c  */
10032 #line 4308 "parse.y"
10033     {
10034                     /*%%%*/
10035                         (yyval.node) = new_args((yyvsp[(1) - (8)].node), (yyvsp[(3) - (8)].node), (yyvsp[(5) - (8)].id), (yyvsp[(7) - (8)].node), (yyvsp[(8) - (8)].id));
10036                     /*%
10037                         $$ = params_new($1, $3, $5, $7, escape_Qundef($8));
10038                     %*/
10039                     ;}
10040     break;
10041 
10042   case 493:
10043 
10044 /* Line 1464 of yacc.c  */
10045 #line 4316 "parse.y"
10046     {
10047                     /*%%%*/
10048                         (yyval.node) = new_args((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node), 0, 0, (yyvsp[(4) - (4)].id));
10049                     /*%
10050                         $$ = params_new($1, $3, Qnil, Qnil, escape_Qundef($4));
10051                     %*/
10052                     ;}
10053     break;
10054 
10055   case 494:
10056 
10057 /* Line 1464 of yacc.c  */
10058 #line 4324 "parse.y"
10059     {
10060                     /*%%%*/
10061                         (yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), 0, (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].id));
10062                     /*%
10063                         $$ = params_new($1, $3, Qnil, $5, escape_Qundef($6));
10064                     %*/
10065                     ;}
10066     break;
10067 
10068   case 495:
10069 
10070 /* Line 1464 of yacc.c  */
10071 #line 4332 "parse.y"
10072     {
10073                     /*%%%*/
10074                         (yyval.node) = new_args((yyvsp[(1) - (4)].node), 0, (yyvsp[(3) - (4)].id), 0, (yyvsp[(4) - (4)].id));
10075                     /*%
10076                         $$ = params_new($1, Qnil, $3, Qnil, escape_Qundef($4));
10077                     %*/
10078                     ;}
10079     break;
10080 
10081   case 496:
10082 
10083 /* Line 1464 of yacc.c  */
10084 #line 4340 "parse.y"
10085     {
10086                     /*%%%*/
10087                         (yyval.node) = new_args((yyvsp[(1) - (6)].node), 0, (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].id));
10088                     /*%
10089                         $$ = params_new($1, Qnil, $3, $5, escape_Qundef($6));
10090                     %*/
10091                     ;}
10092     break;
10093 
10094   case 497:
10095 
10096 /* Line 1464 of yacc.c  */
10097 #line 4348 "parse.y"
10098     {
10099                     /*%%%*/
10100                         (yyval.node) = new_args((yyvsp[(1) - (2)].node), 0, 0, 0, (yyvsp[(2) - (2)].id));
10101                     /*%
10102                         $$ = params_new($1, Qnil, Qnil, Qnil,escape_Qundef($2));
10103                     %*/
10104                     ;}
10105     break;
10106 
10107   case 498:
10108 
10109 /* Line 1464 of yacc.c  */
10110 #line 4356 "parse.y"
10111     {
10112                     /*%%%*/
10113                         (yyval.node) = new_args(0, (yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), 0, (yyvsp[(4) - (4)].id));
10114                     /*%
10115                         $$ = params_new(Qnil, $1, $3, Qnil, escape_Qundef($4));
10116                     %*/
10117                     ;}
10118     break;
10119 
10120   case 499:
10121 
10122 /* Line 1464 of yacc.c  */
10123 #line 4364 "parse.y"
10124     {
10125                     /*%%%*/
10126                         (yyval.node) = new_args(0, (yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].id));
10127                     /*%
10128                         $$ = params_new(Qnil, $1, $3, $5, escape_Qundef($6));
10129                     %*/
10130                     ;}
10131     break;
10132 
10133   case 500:
10134 
10135 /* Line 1464 of yacc.c  */
10136 #line 4372 "parse.y"
10137     {
10138                     /*%%%*/
10139                         (yyval.node) = new_args(0, (yyvsp[(1) - (2)].node), 0, 0, (yyvsp[(2) - (2)].id));
10140                     /*%
10141                         $$ = params_new(Qnil, $1, Qnil, Qnil,escape_Qundef($2));
10142                     %*/
10143                     ;}
10144     break;
10145 
10146   case 501:
10147 
10148 /* Line 1464 of yacc.c  */
10149 #line 4380 "parse.y"
10150     {
10151                     /*%%%*/
10152                         (yyval.node) = new_args(0, (yyvsp[(1) - (4)].node), 0, (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].id));
10153                     /*%
10154                         $$ = params_new(Qnil, $1, Qnil, $3, escape_Qundef($4));
10155                     %*/
10156                     ;}
10157     break;
10158 
10159   case 502:
10160 
10161 /* Line 1464 of yacc.c  */
10162 #line 4388 "parse.y"
10163     {
10164                     /*%%%*/
10165                         (yyval.node) = new_args(0, 0, (yyvsp[(1) - (2)].id), 0, (yyvsp[(2) - (2)].id));
10166                     /*%
10167                         $$ = params_new(Qnil, Qnil, $1, Qnil,escape_Qundef($2));
10168                     %*/
10169                     ;}
10170     break;
10171 
10172   case 503:
10173 
10174 /* Line 1464 of yacc.c  */
10175 #line 4396 "parse.y"
10176     {
10177                     /*%%%*/
10178                         (yyval.node) = new_args(0, 0, (yyvsp[(1) - (4)].id), (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].id));
10179                     /*%
10180                         $$ = params_new(Qnil, Qnil, $1, $3, escape_Qundef($4));
10181                     %*/
10182                     ;}
10183     break;
10184 
10185   case 504:
10186 
10187 /* Line 1464 of yacc.c  */
10188 #line 4404 "parse.y"
10189     {
10190                     /*%%%*/
10191                         (yyval.node) = new_args(0, 0, 0, 0, (yyvsp[(1) - (1)].id));
10192                     /*%
10193                         $$ = params_new(Qnil, Qnil, Qnil, Qnil, $1);
10194                     %*/
10195                     ;}
10196     break;
10197 
10198   case 505:
10199 
10200 /* Line 1464 of yacc.c  */
10201 #line 4412 "parse.y"
10202     {
10203                     /*%%%*/
10204                         (yyval.node) = new_args(0, 0, 0, 0, 0);
10205                     /*%
10206                         $$ = params_new(Qnil, Qnil, Qnil, Qnil, Qnil);
10207                     %*/
10208                     ;}
10209     break;
10210 
10211   case 506:
10212 
10213 /* Line 1464 of yacc.c  */
10214 #line 4422 "parse.y"
10215     {
10216                     /*%%%*/
10217                         yyerror("formal argument cannot be a constant");
10218                         (yyval.id) = 0;
10219                     /*%
10220                         $$ = dispatch1(param_error, $1);
10221                     %*/
10222                     ;}
10223     break;
10224 
10225   case 507:
10226 
10227 /* Line 1464 of yacc.c  */
10228 #line 4431 "parse.y"
10229     {
10230                     /*%%%*/
10231                         yyerror("formal argument cannot be an instance variable");
10232                         (yyval.id) = 0;
10233                     /*%
10234                         $$ = dispatch1(param_error, $1);
10235                     %*/
10236                     ;}
10237     break;
10238 
10239   case 508:
10240 
10241 /* Line 1464 of yacc.c  */
10242 #line 4440 "parse.y"
10243     {
10244                     /*%%%*/
10245                         yyerror("formal argument cannot be a global variable");
10246                         (yyval.id) = 0;
10247                     /*%
10248                         $$ = dispatch1(param_error, $1);
10249                     %*/
10250                     ;}
10251     break;
10252 
10253   case 509:
10254 
10255 /* Line 1464 of yacc.c  */
10256 #line 4449 "parse.y"
10257     {
10258                     /*%%%*/
10259                         yyerror("formal argument cannot be a class variable");
10260                         (yyval.id) = 0;
10261                     /*%
10262                         $$ = dispatch1(param_error, $1);
10263                     %*/
10264                     ;}
10265     break;
10266 
10267   case 511:
10268 
10269 /* Line 1464 of yacc.c  */
10270 #line 4461 "parse.y"
10271     {
10272                         formal_argument(get_id((yyvsp[(1) - (1)].id)));
10273                         (yyval.id) = (yyvsp[(1) - (1)].id);
10274                     ;}
10275     break;
10276 
10277   case 512:
10278 
10279 /* Line 1464 of yacc.c  */
10280 #line 4468 "parse.y"
10281     {
10282                         arg_var(get_id((yyvsp[(1) - (1)].id)));
10283                     /*%%%*/
10284                         (yyval.node) = NEW_ARGS_AUX((yyvsp[(1) - (1)].id), 1);
10285                     /*%
10286                         $$ = get_value($1);
10287                     %*/
10288                     ;}
10289     break;
10290 
10291   case 513:
10292 
10293 /* Line 1464 of yacc.c  */
10294 #line 4477 "parse.y"
10295     {
10296                         ID tid = internal_id();
10297                         arg_var(tid);
10298                     /*%%%*/
10299                         if (dyna_in_block()) {
10300                             (yyvsp[(2) - (3)].node)->nd_value = NEW_DVAR(tid);
10301                         }
10302                         else {
10303                             (yyvsp[(2) - (3)].node)->nd_value = NEW_LVAR(tid);
10304                         }
10305                         (yyval.node) = NEW_ARGS_AUX(tid, 1);
10306                         (yyval.node)->nd_next = (yyvsp[(2) - (3)].node);
10307                     /*%
10308                         $$ = dispatch1(mlhs_paren, $2);
10309                     %*/
10310                     ;}
10311     break;
10312 
10313   case 515:
10314 
10315 /* Line 1464 of yacc.c  */
10316 #line 4503 "parse.y"
10317     {
10318                     /*%%%*/
10319                         (yyval.node) = (yyvsp[(1) - (3)].node);
10320                         (yyval.node)->nd_plen++;
10321                         (yyval.node)->nd_next = block_append((yyval.node)->nd_next, (yyvsp[(3) - (3)].node)->nd_next);
10322                         rb_gc_force_recycle((VALUE)(yyvsp[(3) - (3)].node));
10323                     /*%
10324                         $$ = rb_ary_push($1, $3);
10325                     %*/
10326                     ;}
10327     break;
10328 
10329   case 516:
10330 
10331 /* Line 1464 of yacc.c  */
10332 #line 4516 "parse.y"
10333     {
10334                         arg_var(formal_argument(get_id((yyvsp[(1) - (3)].id))));
10335                         (yyval.node) = assignable((yyvsp[(1) - (3)].id), (yyvsp[(3) - (3)].node));
10336                     /*%%%*/
10337                         (yyval.node) = NEW_OPT_ARG(0, (yyval.node));
10338                     /*%
10339                         $$ = rb_assoc_new($$, $3);
10340                     %*/
10341                     ;}
10342     break;
10343 
10344   case 517:
10345 
10346 /* Line 1464 of yacc.c  */
10347 #line 4528 "parse.y"
10348     {
10349                         arg_var(formal_argument(get_id((yyvsp[(1) - (3)].id))));
10350                         (yyval.node) = assignable((yyvsp[(1) - (3)].id), (yyvsp[(3) - (3)].node));
10351                     /*%%%*/
10352                         (yyval.node) = NEW_OPT_ARG(0, (yyval.node));
10353                     /*%
10354                         $$ = rb_assoc_new($$, $3);
10355                     %*/
10356                     ;}
10357     break;
10358 
10359   case 518:
10360 
10361 /* Line 1464 of yacc.c  */
10362 #line 4540 "parse.y"
10363     {
10364                     /*%%%*/
10365                         (yyval.node) = (yyvsp[(1) - (1)].node);
10366                     /*%
10367                         $$ = rb_ary_new3(1, $1);
10368                     %*/
10369                     ;}
10370     break;
10371 
10372   case 519:
10373 
10374 /* Line 1464 of yacc.c  */
10375 #line 4548 "parse.y"
10376     {
10377                     /*%%%*/
10378                         NODE *opts = (yyvsp[(1) - (3)].node);
10379 
10380                         while (opts->nd_next) {
10381                             opts = opts->nd_next;
10382                         }
10383                         opts->nd_next = (yyvsp[(3) - (3)].node);
10384                         (yyval.node) = (yyvsp[(1) - (3)].node);
10385                     /*%
10386                         $$ = rb_ary_push($1, $3);
10387                     %*/
10388                     ;}
10389     break;
10390 
10391   case 520:
10392 
10393 /* Line 1464 of yacc.c  */
10394 #line 4564 "parse.y"
10395     {
10396                     /*%%%*/
10397                         (yyval.node) = (yyvsp[(1) - (1)].node);
10398                     /*%
10399                         $$ = rb_ary_new3(1, $1);
10400                     %*/
10401                     ;}
10402     break;
10403 
10404   case 521:
10405 
10406 /* Line 1464 of yacc.c  */
10407 #line 4572 "parse.y"
10408     {
10409                     /*%%%*/
10410                         NODE *opts = (yyvsp[(1) - (3)].node);
10411 
10412                         while (opts->nd_next) {
10413                             opts = opts->nd_next;
10414                         }
10415                         opts->nd_next = (yyvsp[(3) - (3)].node);
10416                         (yyval.node) = (yyvsp[(1) - (3)].node);
10417                     /*%
10418                         $$ = rb_ary_push($1, $3);
10419                     %*/
10420                     ;}
10421     break;
10422 
10423   case 524:
10424 
10425 /* Line 1464 of yacc.c  */
10426 #line 4592 "parse.y"
10427     {
10428                     /*%%%*/
10429                         if (!is_local_id((yyvsp[(2) - (2)].id)))
10430                             yyerror("rest argument must be local variable");
10431                     /*% %*/
10432                         arg_var(shadowing_lvar(get_id((yyvsp[(2) - (2)].id))));
10433                     /*%%%*/
10434                         (yyval.id) = (yyvsp[(2) - (2)].id);
10435                     /*%
10436                         $$ = dispatch1(rest_param, $2);
10437                     %*/
10438                     ;}
10439     break;
10440 
10441   case 525:
10442 
10443 /* Line 1464 of yacc.c  */
10444 #line 4605 "parse.y"
10445     {
10446                     /*%%%*/
10447                         (yyval.id) = internal_id();
10448                         arg_var((yyval.id));
10449                     /*%
10450                         $$ = dispatch1(rest_param, Qnil);
10451                     %*/
10452                     ;}
10453     break;
10454 
10455   case 528:
10456 
10457 /* Line 1464 of yacc.c  */
10458 #line 4620 "parse.y"
10459     {
10460                     /*%%%*/
10461                         if (!is_local_id((yyvsp[(2) - (2)].id)))
10462                             yyerror("block argument must be local variable");
10463                         else if (!dyna_in_block() && local_id((yyvsp[(2) - (2)].id)))
10464                             yyerror("duplicated block argument name");
10465                     /*% %*/
10466                         arg_var(shadowing_lvar(get_id((yyvsp[(2) - (2)].id))));
10467                     /*%%%*/
10468                         (yyval.id) = (yyvsp[(2) - (2)].id);
10469                     /*%
10470                         $$ = dispatch1(blockarg, $2);
10471                     %*/
10472                     ;}
10473     break;
10474 
10475   case 529:
10476 
10477 /* Line 1464 of yacc.c  */
10478 #line 4637 "parse.y"
10479     {
10480                         (yyval.id) = (yyvsp[(2) - (2)].id);
10481                     ;}
10482     break;
10483 
10484   case 530:
10485 
10486 /* Line 1464 of yacc.c  */
10487 #line 4641 "parse.y"
10488     {
10489                     /*%%%*/
10490                         (yyval.id) = 0;
10491                     /*%
10492                         $$ = Qundef;
10493                     %*/
10494                     ;}
10495     break;
10496 
10497   case 531:
10498 
10499 /* Line 1464 of yacc.c  */
10500 #line 4651 "parse.y"
10501     {
10502                     /*%%%*/
10503                         value_expr((yyvsp[(1) - (1)].node));
10504                         (yyval.node) = (yyvsp[(1) - (1)].node);
10505                         if (!(yyval.node)) (yyval.node) = NEW_NIL();
10506                     /*%
10507                         $$ = $1;
10508                     %*/
10509                     ;}
10510     break;
10511 
10512   case 532:
10513 
10514 /* Line 1464 of yacc.c  */
10515 #line 4660 "parse.y"
10516     {lex_state = EXPR_BEG;;}
10517     break;
10518 
10519   case 533:
10520 
10521 /* Line 1464 of yacc.c  */
10522 #line 4661 "parse.y"
10523     {
10524                     /*%%%*/
10525                         if ((yyvsp[(3) - (4)].node) == 0) {
10526                             yyerror("can't define singleton method for ().");
10527                         }
10528                         else {
10529                             switch (nd_type((yyvsp[(3) - (4)].node))) {
10530                               case NODE_STR:
10531                               case NODE_DSTR:
10532                               case NODE_XSTR:
10533                               case NODE_DXSTR:
10534                               case NODE_DREGX:
10535                               case NODE_LIT:
10536                               case NODE_ARRAY:
10537                               case NODE_ZARRAY:
10538                                 yyerror("can't define singleton method for literals");
10539                               default:
10540                                 value_expr((yyvsp[(3) - (4)].node));
10541                                 break;
10542                             }
10543                         }
10544                         (yyval.node) = (yyvsp[(3) - (4)].node);
10545                     /*%
10546                         $$ = dispatch1(paren, $3);
10547                     %*/
10548                     ;}
10549     break;
10550 
10551   case 535:
10552 
10553 /* Line 1464 of yacc.c  */
10554 #line 4691 "parse.y"
10555     {
10556                     /*%%%*/
10557                         (yyval.node) = (yyvsp[(1) - (2)].node);
10558                     /*%
10559                         $$ = dispatch1(assoclist_from_args, $1);
10560                     %*/
10561                     ;}
10562     break;
10563 
10564   case 537:
10565 
10566 /* Line 1464 of yacc.c  */
10567 #line 4708 "parse.y"
10568     {
10569                     /*%%%*/
10570                         (yyval.node) = list_concat((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
10571                     /*%
10572                         $$ = rb_ary_push($1, $3);
10573                     %*/
10574                     ;}
10575     break;
10576 
10577   case 538:
10578 
10579 /* Line 1464 of yacc.c  */
10580 #line 4718 "parse.y"
10581     {
10582                     /*%%%*/
10583                         (yyval.node) = list_append(NEW_LIST((yyvsp[(1) - (3)].node)), (yyvsp[(3) - (3)].node));
10584                     /*%
10585                         $$ = dispatch2(assoc_new, $1, $3);
10586                     %*/
10587                     ;}
10588     break;
10589 
10590   case 539:
10591 
10592 /* Line 1464 of yacc.c  */
10593 #line 4726 "parse.y"
10594     {
10595                     /*%%%*/
10596                         (yyval.node) = list_append(NEW_LIST(NEW_LIT(ID2SYM((yyvsp[(1) - (2)].id)))), (yyvsp[(2) - (2)].node));
10597                     /*%
10598                         $$ = dispatch2(assoc_new, $1, $2);
10599                     %*/
10600                     ;}
10601     break;
10602 
10603   case 561:
10604 
10605 /* Line 1464 of yacc.c  */
10606 #line 4782 "parse.y"
10607     {yyerrok;;}
10608     break;
10609 
10610   case 564:
10611 
10612 /* Line 1464 of yacc.c  */
10613 #line 4787 "parse.y"
10614     {yyerrok;;}
10615     break;
10616 
10617   case 565:
10618 
10619 /* Line 1464 of yacc.c  */
10620 #line 4791 "parse.y"
10621     {
10622                     /*%%%*/
10623                         (yyval.node) = 0;
10624                     /*%
10625                         $$ = Qundef;
10626                     %*/
10627                     ;}
10628     break;
10629 
10630 
10631 
10632 /* Line 1464 of yacc.c  */
10633 #line 10632 "parse.c"
10634       default: break;
10635     }
10636   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
10637 
10638   YYPOPSTACK (yylen);
10639   yylen = 0;
10640   YY_STACK_PRINT (yyss, yyssp);
10641 
10642   *++yyvsp = yyval;
10643 
10644   /* Now `shift' the result of the reduction.  Determine what state
10645      that goes to, based on the state we popped back to and the rule
10646      number reduced by.  */
10647 
10648   yyn = yyr1[yyn];
10649 
10650   yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
10651   if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
10652     yystate = yytable[yystate];
10653   else
10654     yystate = yydefgoto[yyn - YYNTOKENS];
10655 
10656   goto yynewstate;
10657 
10658 
10659 /*------------------------------------.
10660 | yyerrlab -- here on detecting error |
10661 `------------------------------------*/
10662 yyerrlab:
10663   /* If not already recovering from an error, report this error.  */
10664   if (!yyerrstatus)
10665     {
10666       ++yynerrs;
10667 #if ! YYERROR_VERBOSE
10668       parser_yyerror (parser, YY_("syntax error"));
10669 #else
10670       {
10671         YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
10672         if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
10673           {
10674             YYSIZE_T yyalloc = 2 * yysize;
10675             if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
10676               yyalloc = YYSTACK_ALLOC_MAXIMUM;
10677             if (yymsg != yymsgbuf)
10678               YYSTACK_FREE (yymsg);
10679             yymsg = (char *) YYSTACK_ALLOC (yyalloc);
10680             if (yymsg)
10681               yymsg_alloc = yyalloc;
10682             else
10683               {
10684                 yymsg = yymsgbuf;
10685                 yymsg_alloc = sizeof yymsgbuf;
10686               }
10687           }
10688 
10689         if (0 < yysize && yysize <= yymsg_alloc)
10690           {
10691             (void) yysyntax_error (yymsg, yystate, yychar);
10692             parser_yyerror (parser, yymsg);
10693           }
10694         else
10695           {
10696             parser_yyerror (parser, YY_("syntax error"));
10697             if (yysize != 0)
10698               goto yyexhaustedlab;
10699           }
10700       }
10701 #endif
10702     }
10703 
10704 
10705 
10706   if (yyerrstatus == 3)
10707     {
10708       /* If just tried and failed to reuse lookahead token after an
10709          error, discard it.  */
10710 
10711       if (yychar <= YYEOF)
10712         {
10713           /* Return failure if at end of input.  */
10714           if (yychar == YYEOF)
10715             YYABORT;
10716         }
10717       else
10718         {
10719           yydestruct ("Error: discarding",
10720                       yytoken, &yylval, parser);
10721           yychar = YYEMPTY;
10722         }
10723     }
10724 
10725   /* Else will try to reuse lookahead token after shifting the error
10726      token.  */
10727   goto yyerrlab1;
10728 
10729 
10730 /*---------------------------------------------------.
10731 | yyerrorlab -- error raised explicitly by YYERROR.  |
10732 `---------------------------------------------------*/
10733 yyerrorlab:
10734 
10735   /* Pacify compilers like GCC when the user code never invokes
10736      YYERROR and the label yyerrorlab therefore never appears in user
10737      code.  */
10738   if (/*CONSTCOND*/ 0)
10739      goto yyerrorlab;
10740 
10741   /* Do not reclaim the symbols of the rule which action triggered
10742      this YYERROR.  */
10743   YYPOPSTACK (yylen);
10744   yylen = 0;
10745   YY_STACK_PRINT (yyss, yyssp);
10746   yystate = *yyssp;
10747   goto yyerrlab1;
10748 
10749 
10750 /*-------------------------------------------------------------.
10751 | yyerrlab1 -- common code for both syntax error and YYERROR.  |
10752 `-------------------------------------------------------------*/
10753 yyerrlab1:
10754   yyerrstatus = 3;      /* Each real token shifted decrements this.  */
10755 
10756   for (;;)
10757     {
10758       yyn = yypact[yystate];
10759       if (yyn != YYPACT_NINF)
10760         {
10761           yyn += YYTERROR;
10762           if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
10763             {
10764               yyn = yytable[yyn];
10765               if (0 < yyn)
10766                 break;
10767             }
10768         }
10769 
10770       /* Pop the current state because it cannot handle the error token.  */
10771       if (yyssp == yyss)
10772         YYABORT;
10773 
10774 
10775       yydestruct ("Error: popping",
10776                   yystos[yystate], yyvsp, parser);
10777       YYPOPSTACK (1);
10778       yystate = *yyssp;
10779       YY_STACK_PRINT (yyss, yyssp);
10780     }
10781 
10782   *++yyvsp = yylval;
10783 
10784 
10785   /* Shift the error token.  */
10786   YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
10787 
10788   yystate = yyn;
10789   goto yynewstate;
10790 
10791 
10792 /*-------------------------------------.
10793 | yyacceptlab -- YYACCEPT comes here.  |
10794 `-------------------------------------*/
10795 yyacceptlab:
10796   yyresult = 0;
10797   goto yyreturn;
10798 
10799 /*-----------------------------------.
10800 | yyabortlab -- YYABORT comes here.  |
10801 `-----------------------------------*/
10802 yyabortlab:
10803   yyresult = 1;
10804   goto yyreturn;
10805 
10806 #if !defined(yyoverflow) || YYERROR_VERBOSE
10807 /*-------------------------------------------------.
10808 | yyexhaustedlab -- memory exhaustion comes here.  |
10809 `-------------------------------------------------*/
10810 yyexhaustedlab:
10811   parser_yyerror (parser, YY_("memory exhausted"));
10812   yyresult = 2;
10813   /* Fall through.  */
10814 #endif
10815 
10816 yyreturn:
10817   if (yychar != YYEMPTY)
10818      yydestruct ("Cleanup: discarding lookahead",
10819                  yytoken, &yylval, parser);
10820   /* Do not reclaim the symbols of the rule which action triggered
10821      this YYABORT or YYACCEPT.  */
10822   YYPOPSTACK (yylen);
10823   YY_STACK_PRINT (yyss, yyssp);
10824   while (yyssp != yyss)
10825     {
10826       yydestruct ("Cleanup: popping",
10827                   yystos[*yyssp], yyvsp, parser);
10828       YYPOPSTACK (1);
10829     }
10830 #ifndef yyoverflow
10831   if (yyss != yyssa)
10832     YYSTACK_FREE (yyss);
10833 #endif
10834 #if YYERROR_VERBOSE
10835   if (yymsg != yymsgbuf)
10836     YYSTACK_FREE (yymsg);
10837 #endif
10838   /* Make sure YYID is used.  */
10839   return YYID (yyresult);
10840 }
10841 
10842 
10843 
10844 /* Line 1684 of yacc.c  */
10845 #line 4799 "parse.y"
10846 
10847 # undef parser
10848 # undef yylex
10849 # undef yylval
10850 # define yylval  (*((YYSTYPE*)(parser->parser_yylval)))
10851 
10852 static int parser_regx_options(struct parser_params*);
10853 static int parser_tokadd_string(struct parser_params*,int,int,int,long*,rb_encoding**);
10854 static void parser_tokaddmbc(struct parser_params *parser, int c, rb_encoding *enc);
10855 static int parser_parse_string(struct parser_params*,NODE*);
10856 static int parser_here_document(struct parser_params*,NODE*);
10857 
10858 
10859 # define nextc()                   parser_nextc(parser)
10860 # define pushback(c)               parser_pushback(parser, c)
10861 # define newtok()                  parser_newtok(parser)
10862 # define tokspace(n)               parser_tokspace(parser, n)
10863 # define tokadd(c)                 parser_tokadd(parser, c)
10864 # define tok_hex(numlen)           parser_tok_hex(parser, numlen)
10865 # define read_escape(flags,e)      parser_read_escape(parser, flags, e)
10866 # define tokadd_escape(e)          parser_tokadd_escape(parser, e)
10867 # define regx_options()            parser_regx_options(parser)
10868 # define tokadd_string(f,t,p,n,e)  parser_tokadd_string(parser,f,t,p,n,e)
10869 # define parse_string(n)           parser_parse_string(parser,n)
10870 # define tokaddmbc(c, enc)         parser_tokaddmbc(parser, c, enc)
10871 # define here_document(n)          parser_here_document(parser,n)
10872 # define heredoc_identifier()      parser_heredoc_identifier(parser)
10873 # define heredoc_restore(n)        parser_heredoc_restore(parser,n)
10874 # define whole_match_p(e,l,i)      parser_whole_match_p(parser,e,l,i)
10875 
10876 #ifndef RIPPER
10877 # define set_yylval_str(x) yylval.node = NEW_STR(x)
10878 # define set_yylval_num(x) yylval.num = x
10879 # define set_yylval_id(x)  yylval.id = x
10880 # define set_yylval_name(x)  yylval.id = x
10881 # define set_yylval_literal(x) yylval.node = NEW_LIT(x)
10882 # define set_yylval_node(x) yylval.node = x
10883 # define yylval_id() yylval.id
10884 #else
10885 static inline VALUE
10886 ripper_yylval_id(ID x)
10887 {
10888     return (VALUE)NEW_LASGN(x, ID2SYM(x));
10889 }
10890 # define set_yylval_str(x) (void)(x)
10891 # define set_yylval_num(x) (void)(x)
10892 # define set_yylval_id(x)  (void)(x)
10893 # define set_yylval_name(x) (void)(yylval.val = ripper_yylval_id(x))
10894 # define set_yylval_literal(x) (void)(x)
10895 # define set_yylval_node(x) (void)(x)
10896 # define yylval_id() yylval.id
10897 #endif
10898 
10899 #ifndef RIPPER
10900 #define ripper_flush(p) (void)(p)
10901 #else
10902 #define ripper_flush(p) (p->tokp = p->parser_lex_p)
10903 
10904 #define yylval_rval *(RB_TYPE_P(yylval.val, T_NODE) ? &yylval.node->nd_rval : &yylval.val)
10905 
10906 static int
10907 ripper_has_scan_event(struct parser_params *parser)
10908 {
10909 
10910     if (lex_p < parser->tokp) rb_raise(rb_eRuntimeError, "lex_p < tokp");
10911     return lex_p > parser->tokp;
10912 }
10913 
10914 static VALUE
10915 ripper_scan_event_val(struct parser_params *parser, int t)
10916 {
10917     VALUE str = STR_NEW(parser->tokp, lex_p - parser->tokp);
10918     VALUE rval = ripper_dispatch1(parser, ripper_token2eventid(t), str);
10919     ripper_flush(parser);
10920     return rval;
10921 }
10922 
10923 static void
10924 ripper_dispatch_scan_event(struct parser_params *parser, int t)
10925 {
10926     if (!ripper_has_scan_event(parser)) return;
10927     yylval_rval = ripper_scan_event_val(parser, t);
10928 }
10929 
10930 static void
10931 ripper_dispatch_ignored_scan_event(struct parser_params *parser, int t)
10932 {
10933     if (!ripper_has_scan_event(parser)) return;
10934     (void)ripper_scan_event_val(parser, t);
10935 }
10936 
10937 static void
10938 ripper_dispatch_delayed_token(struct parser_params *parser, int t)
10939 {
10940     int saved_line = ruby_sourceline;
10941     const char *saved_tokp = parser->tokp;
10942 
10943     ruby_sourceline = parser->delayed_line;
10944     parser->tokp = lex_pbeg + parser->delayed_col;
10945     yylval_rval = ripper_dispatch1(parser, ripper_token2eventid(t), parser->delayed);
10946     parser->delayed = Qnil;
10947     ruby_sourceline = saved_line;
10948     parser->tokp = saved_tokp;
10949 }
10950 #endif /* RIPPER */
10951 
10952 #include "ruby/regex.h"
10953 #include "ruby/util.h"
10954 
10955 /* We remove any previous definition of `SIGN_EXTEND_CHAR',
10956    since ours (we hope) works properly with all combinations of
10957    machines, compilers, `char' and `unsigned char' argument types.
10958    (Per Bothner suggested the basic approach.)  */
10959 #undef SIGN_EXTEND_CHAR
10960 #if __STDC__
10961 # define SIGN_EXTEND_CHAR(c) ((signed char)(c))
10962 #else  /* not __STDC__ */
10963 /* As in Harbison and Steele.  */
10964 # define SIGN_EXTEND_CHAR(c) ((((unsigned char)(c)) ^ 128) - 128)
10965 #endif
10966 
10967 #define parser_encoding_name()  (parser->enc->name)
10968 #define parser_mbclen()  mbclen((lex_p-1),lex_pend,parser->enc)
10969 #define parser_precise_mbclen()  rb_enc_precise_mbclen((lex_p-1),lex_pend,parser->enc)
10970 #define is_identchar(p,e,enc) (rb_enc_isalnum(*p,enc) || (*p) == '_' || !ISASCII(*p))
10971 #define parser_is_identchar() (!parser->eofp && is_identchar((lex_p-1),lex_pend,parser->enc))
10972 
10973 #define parser_isascii() ISASCII(*(lex_p-1))
10974 
10975 #ifndef RIPPER
10976 static int
10977 token_info_get_column(struct parser_params *parser, const char *token)
10978 {
10979     int column = 1;
10980     const char *p, *pend = lex_p - strlen(token);
10981     for (p = lex_pbeg; p < pend; p++) {
10982         if (*p == '\t') {
10983             column = (((column - 1) / 8) + 1) * 8;
10984         }
10985         column++;
10986     }
10987     return column;
10988 }
10989 
10990 static int
10991 token_info_has_nonspaces(struct parser_params *parser, const char *token)
10992 {
10993     const char *p, *pend = lex_p - strlen(token);
10994     for (p = lex_pbeg; p < pend; p++) {
10995         if (*p != ' ' && *p != '\t') {
10996             return 1;
10997         }
10998     }
10999     return 0;
11000 }
11001 
11002 #undef token_info_push
11003 static void
11004 token_info_push(struct parser_params *parser, const char *token)
11005 {
11006     token_info *ptinfo;
11007 
11008     if (compile_for_eval) return;
11009     ptinfo = ALLOC(token_info);
11010     ptinfo->token = token;
11011     ptinfo->linenum = ruby_sourceline;
11012     ptinfo->column = token_info_get_column(parser, token);
11013     ptinfo->nonspc = token_info_has_nonspaces(parser, token);
11014     ptinfo->next = parser->parser_token_info;
11015 
11016     parser->parser_token_info = ptinfo;
11017 }
11018 
11019 #undef token_info_pop
11020 static void
11021 token_info_pop(struct parser_params *parser, const char *token)
11022 {
11023     int linenum;
11024     token_info *ptinfo = parser->parser_token_info;
11025 
11026     if (!ptinfo) return;
11027     parser->parser_token_info = ptinfo->next;
11028     if (token_info_get_column(parser, token) == ptinfo->column) { /* OK */
11029         goto finish;
11030     }
11031     linenum = ruby_sourceline;
11032     if (linenum == ptinfo->linenum) { /* SKIP */
11033         goto finish;
11034     }
11035     if (token_info_has_nonspaces(parser, token) || ptinfo->nonspc) { /* SKIP */
11036         goto finish;
11037     }
11038     rb_compile_warning(ruby_sourcefile, linenum,
11039                "mismatched indentations at '%s' with '%s' at %d",
11040                token, ptinfo->token, ptinfo->linenum);
11041 
11042   finish:
11043     xfree(ptinfo);
11044 }
11045 #endif  /* RIPPER */
11046 
11047 static int
11048 parser_yyerror(struct parser_params *parser, const char *msg)
11049 {
11050 #ifndef RIPPER
11051     const int max_line_margin = 30;
11052     const char *p, *pe;
11053     char *buf;
11054     long len;
11055     int i;
11056 
11057     compile_error(PARSER_ARG "%s", msg);
11058     p = lex_p;
11059     while (lex_pbeg <= p) {
11060         if (*p == '\n') break;
11061         p--;
11062     }
11063     p++;
11064 
11065     pe = lex_p;
11066     while (pe < lex_pend) {
11067         if (*pe == '\n') break;
11068         pe++;
11069     }
11070 
11071     len = pe - p;
11072     if (len > 4) {
11073         char *p2;
11074         const char *pre = "", *post = "";
11075 
11076         if (len > max_line_margin * 2 + 10) {
11077             if (lex_p - p > max_line_margin) {
11078                 p = rb_enc_prev_char(p, lex_p - max_line_margin, pe, rb_enc_get(lex_lastline));
11079                 pre = "...";
11080             }
11081             if (pe - lex_p > max_line_margin) {
11082                 pe = rb_enc_prev_char(lex_p, lex_p + max_line_margin, pe, rb_enc_get(lex_lastline));
11083                 post = "...";
11084             }
11085             len = pe - p;
11086         }
11087         buf = ALLOCA_N(char, len+2);
11088         MEMCPY(buf, p, char, len);
11089         buf[len] = '\0';
11090         rb_compile_error_append("%s%s%s", pre, buf, post);
11091 
11092         i = (int)(lex_p - p);
11093         p2 = buf; pe = buf + len;
11094 
11095         while (p2 < pe) {
11096             if (*p2 != '\t') *p2 = ' ';
11097             p2++;
11098         }
11099         buf[i] = '^';
11100         buf[i+1] = '\0';
11101         rb_compile_error_append("%s%s", pre, buf);
11102     }
11103 #else
11104     dispatch1(parse_error, STR_NEW2(msg));
11105 #endif /* !RIPPER */
11106     return 0;
11107 }
11108 
11109 static void parser_prepare(struct parser_params *parser);
11110 
11111 #ifndef RIPPER
11112 VALUE ruby_suppress_tracing(VALUE (*func)(VALUE, int), VALUE arg, int always);
11113 
11114 static VALUE
11115 debug_lines(const char *f)
11116 {
11117     ID script_lines;
11118     CONST_ID(script_lines, "SCRIPT_LINES__");
11119     if (rb_const_defined_at(rb_cObject, script_lines)) {
11120         VALUE hash = rb_const_get_at(rb_cObject, script_lines);
11121         if (TYPE(hash) == T_HASH) {
11122             VALUE fname = rb_str_new2(f);
11123             VALUE lines = rb_ary_new();
11124             rb_hash_aset(hash, fname, lines);
11125             return lines;
11126         }
11127     }
11128     return 0;
11129 }
11130 
11131 static VALUE
11132 coverage(const char *f, int n)
11133 {
11134     extern VALUE rb_get_coverages(void);
11135     VALUE coverages = rb_get_coverages();
11136     if (RTEST(coverages) && RBASIC(coverages)->klass == 0) {
11137         VALUE fname = rb_str_new2(f);
11138         VALUE lines = rb_ary_new2(n);
11139         int i;
11140         RBASIC(lines)->klass = 0;
11141         for (i = 0; i < n; i++) RARRAY_PTR(lines)[i] = Qnil;
11142         RARRAY(lines)->as.heap.len = n;
11143         rb_hash_aset(coverages, fname, lines);
11144         return lines;
11145     }
11146     return 0;
11147 }
11148 
11149 static int
11150 e_option_supplied(struct parser_params *parser)
11151 {
11152     return strcmp(ruby_sourcefile, "-e") == 0;
11153 }
11154 
11155 static VALUE
11156 yycompile0(VALUE arg, int tracing)
11157 {
11158     int n;
11159     NODE *tree;
11160     struct parser_params *parser = (struct parser_params *)arg;
11161 
11162     if (!compile_for_eval && rb_safe_level() == 0) {
11163         ruby_debug_lines = debug_lines(ruby_sourcefile);
11164         if (ruby_debug_lines && ruby_sourceline > 0) {
11165             VALUE str = STR_NEW0();
11166             n = ruby_sourceline;
11167             do {
11168                 rb_ary_push(ruby_debug_lines, str);
11169             } while (--n);
11170         }
11171 
11172         if (!e_option_supplied(parser)) {
11173             ruby_coverage = coverage(ruby_sourcefile, ruby_sourceline);
11174         }
11175     }
11176 
11177     parser_prepare(parser);
11178     deferred_nodes = 0;
11179     n = yyparse((void*)parser);
11180     ruby_debug_lines = 0;
11181     ruby_coverage = 0;
11182     compile_for_eval = 0;
11183 
11184     lex_strterm = 0;
11185     lex_p = lex_pbeg = lex_pend = 0;
11186     lex_lastline = lex_nextline = 0;
11187     if (parser->nerr) {
11188         return 0;
11189     }
11190     tree = ruby_eval_tree;
11191     if (!tree) {
11192         tree = NEW_NIL();
11193     }
11194     else if (ruby_eval_tree_begin) {
11195         tree->nd_body = NEW_PRELUDE(ruby_eval_tree_begin, tree->nd_body);
11196     }
11197     return (VALUE)tree;
11198 }
11199 
11200 static NODE*
11201 yycompile(struct parser_params *parser, const char *f, int line)
11202 {
11203     ruby_sourcefile = ruby_strdup(f);
11204     ruby_sourceline = line - 1;
11205     return (NODE *)ruby_suppress_tracing(yycompile0, (VALUE)parser, TRUE);
11206 }
11207 #endif /* !RIPPER */
11208 
11209 static rb_encoding *
11210 must_be_ascii_compatible(VALUE s)
11211 {
11212     rb_encoding *enc = rb_enc_get(s);
11213     if (!rb_enc_asciicompat(enc)) {
11214         rb_raise(rb_eArgError, "invalid source encoding");
11215     }
11216     return enc;
11217 }
11218 
11219 static VALUE
11220 lex_get_str(struct parser_params *parser, VALUE s)
11221 {
11222     char *beg, *end, *pend;
11223     rb_encoding *enc = must_be_ascii_compatible(s);
11224 
11225     beg = RSTRING_PTR(s);
11226     if (lex_gets_ptr) {
11227         if (RSTRING_LEN(s) == lex_gets_ptr) return Qnil;
11228         beg += lex_gets_ptr;
11229     }
11230     pend = RSTRING_PTR(s) + RSTRING_LEN(s);
11231     end = beg;
11232     while (end < pend) {
11233         if (*end++ == '\n') break;
11234     }
11235     lex_gets_ptr = end - RSTRING_PTR(s);
11236     return rb_enc_str_new(beg, end - beg, enc);
11237 }
11238 
11239 static VALUE
11240 lex_getline(struct parser_params *parser)
11241 {
11242     VALUE line = (*parser->parser_lex_gets)(parser, parser->parser_lex_input);
11243     if (NIL_P(line)) return line;
11244     must_be_ascii_compatible(line);
11245 #ifndef RIPPER
11246     if (ruby_debug_lines) {
11247         rb_ary_push(ruby_debug_lines, line);
11248     }
11249     if (ruby_coverage) {
11250         rb_ary_push(ruby_coverage, Qnil);
11251     }
11252 #endif
11253     return line;
11254 }
11255 
11256 static const rb_data_type_t parser_data_type;
11257 
11258 #ifndef RIPPER
11259 static NODE*
11260 parser_compile_string(volatile VALUE vparser, const char *f, VALUE s, int line)
11261 {
11262     struct parser_params *parser;
11263     NODE *node;
11264     volatile VALUE tmp;
11265 
11266     TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
11267     lex_gets = lex_get_str;
11268     lex_gets_ptr = 0;
11269     lex_input = s;
11270     lex_pbeg = lex_p = lex_pend = 0;
11271     compile_for_eval = rb_parse_in_eval();
11272 
11273     node = yycompile(parser, f, line);
11274     tmp = vparser; /* prohibit tail call optimization */
11275 
11276     return node;
11277 }
11278 
11279 NODE*
11280 rb_compile_string(const char *f, VALUE s, int line)
11281 {
11282     must_be_ascii_compatible(s);
11283     return parser_compile_string(rb_parser_new(), f, s, line);
11284 }
11285 
11286 NODE*
11287 rb_parser_compile_string(volatile VALUE vparser, const char *f, VALUE s, int line)
11288 {
11289     must_be_ascii_compatible(s);
11290     return parser_compile_string(vparser, f, s, line);
11291 }
11292 
11293 NODE*
11294 rb_compile_cstr(const char *f, const char *s, int len, int line)
11295 {
11296     VALUE str = rb_str_new(s, len);
11297     return parser_compile_string(rb_parser_new(), f, str, line);
11298 }
11299 
11300 NODE*
11301 rb_parser_compile_cstr(volatile VALUE vparser, const char *f, const char *s, int len, int line)
11302 {
11303     VALUE str = rb_str_new(s, len);
11304     return parser_compile_string(vparser, f, str, line);
11305 }
11306 
11307 static VALUE
11308 lex_io_gets(struct parser_params *parser, VALUE io)
11309 {
11310     return rb_io_gets(io);
11311 }
11312 
11313 NODE*
11314 rb_compile_file(const char *f, VALUE file, int start)
11315 {
11316     VALUE volatile vparser = rb_parser_new();
11317 
11318     return rb_parser_compile_file(vparser, f, file, start);
11319 }
11320 
11321 NODE*
11322 rb_parser_compile_file(volatile VALUE vparser, const char *f, VALUE file, int start)
11323 {
11324     struct parser_params *parser;
11325     volatile VALUE tmp;
11326     NODE *node;
11327 
11328     TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
11329     lex_gets = lex_io_gets;
11330     lex_input = file;
11331     lex_pbeg = lex_p = lex_pend = 0;
11332     compile_for_eval = rb_parse_in_eval();
11333 
11334     node = yycompile(parser, f, start);
11335     tmp = vparser; /* prohibit tail call optimization */
11336 
11337     return node;
11338 }
11339 #endif  /* !RIPPER */
11340 
11341 #define STR_FUNC_ESCAPE 0x01
11342 #define STR_FUNC_EXPAND 0x02
11343 #define STR_FUNC_REGEXP 0x04
11344 #define STR_FUNC_QWORDS 0x08
11345 #define STR_FUNC_SYMBOL 0x10
11346 #define STR_FUNC_INDENT 0x20
11347 
11348 enum string_type {
11349     str_squote = (0),
11350     str_dquote = (STR_FUNC_EXPAND),
11351     str_xquote = (STR_FUNC_EXPAND),
11352     str_regexp = (STR_FUNC_REGEXP|STR_FUNC_ESCAPE|STR_FUNC_EXPAND),
11353     str_sword  = (STR_FUNC_QWORDS),
11354     str_dword  = (STR_FUNC_QWORDS|STR_FUNC_EXPAND),
11355     str_ssym   = (STR_FUNC_SYMBOL),
11356     str_dsym   = (STR_FUNC_SYMBOL|STR_FUNC_EXPAND)
11357 };
11358 
11359 static VALUE
11360 parser_str_new(const char *p, long n, rb_encoding *enc, int func, rb_encoding *enc0)
11361 {
11362     VALUE str;
11363 
11364     str = rb_enc_str_new(p, n, enc);
11365     if (!(func & STR_FUNC_REGEXP) && rb_enc_asciicompat(enc)) {
11366         if (rb_enc_str_coderange(str) == ENC_CODERANGE_7BIT) {
11367         }
11368         else if (enc0 == rb_usascii_encoding() && enc != rb_utf8_encoding()) {
11369             rb_enc_associate(str, rb_ascii8bit_encoding());
11370         }
11371     }
11372 
11373     return str;
11374 }
11375 
11376 #define lex_goto_eol(parser) (parser->parser_lex_p = parser->parser_lex_pend)
11377 #define peek(c) (lex_p < lex_pend && (c) == *lex_p)
11378 
11379 static inline int
11380 parser_nextc(struct parser_params *parser)
11381 {
11382     int c;
11383 
11384     if (lex_p == lex_pend) {
11385         VALUE v = lex_nextline;
11386         lex_nextline = 0;
11387         if (!v) {
11388             if (parser->eofp)
11389                 return -1;
11390 
11391             if (!lex_input || NIL_P(v = lex_getline(parser))) {
11392                 parser->eofp = Qtrue;
11393                 lex_goto_eol(parser);
11394                 return -1;
11395             }
11396         }
11397         {
11398 #ifdef RIPPER
11399             if (parser->tokp < lex_pend) {
11400                 if (NIL_P(parser->delayed)) {
11401                     parser->delayed = rb_str_buf_new(1024);
11402                     rb_str_buf_cat(parser->delayed,
11403                                    parser->tokp, lex_pend - parser->tokp);
11404                     parser->delayed_line = ruby_sourceline;
11405                     parser->delayed_col = (int)(parser->tokp - lex_pbeg);
11406                 }
11407                 else {
11408                     rb_str_buf_cat(parser->delayed,
11409                                    parser->tokp, lex_pend - parser->tokp);
11410                 }
11411             }
11412 #endif
11413             if (heredoc_end > 0) {
11414                 ruby_sourceline = heredoc_end;
11415                 heredoc_end = 0;
11416             }
11417             ruby_sourceline++;
11418             parser->line_count++;
11419             lex_pbeg = lex_p = RSTRING_PTR(v);
11420             lex_pend = lex_p + RSTRING_LEN(v);
11421             ripper_flush(parser);
11422             lex_lastline = v;
11423         }
11424     }
11425     c = (unsigned char)*lex_p++;
11426     if (c == '\r' && peek('\n')) {
11427         lex_p++;
11428         c = '\n';
11429     }
11430 
11431     return c;
11432 }
11433 
11434 static void
11435 parser_pushback(struct parser_params *parser, int c)
11436 {
11437     if (c == -1) return;
11438     lex_p--;
11439     if (lex_p > lex_pbeg && lex_p[0] == '\n' && lex_p[-1] == '\r') {
11440         lex_p--;
11441     }
11442 }
11443 
11444 #define was_bol() (lex_p == lex_pbeg + 1)
11445 
11446 #define tokfix() (tokenbuf[tokidx]='\0')
11447 #define tok() tokenbuf
11448 #define toklen() tokidx
11449 #define toklast() (tokidx>0?tokenbuf[tokidx-1]:0)
11450 
11451 static char*
11452 parser_newtok(struct parser_params *parser)
11453 {
11454     tokidx = 0;
11455     if (!tokenbuf) {
11456         toksiz = 60;
11457         tokenbuf = ALLOC_N(char, 60);
11458     }
11459     if (toksiz > 4096) {
11460         toksiz = 60;
11461         REALLOC_N(tokenbuf, char, 60);
11462     }
11463     return tokenbuf;
11464 }
11465 
11466 static char *
11467 parser_tokspace(struct parser_params *parser, int n)
11468 {
11469     tokidx += n;
11470 
11471     if (tokidx >= toksiz) {
11472         do {toksiz *= 2;} while (toksiz < tokidx);
11473         REALLOC_N(tokenbuf, char, toksiz);
11474     }
11475     return &tokenbuf[tokidx-n];
11476 }
11477 
11478 static void
11479 parser_tokadd(struct parser_params *parser, int c)
11480 {
11481     tokenbuf[tokidx++] = (char)c;
11482     if (tokidx >= toksiz) {
11483         toksiz *= 2;
11484         REALLOC_N(tokenbuf, char, toksiz);
11485     }
11486 }
11487 
11488 static int
11489 parser_tok_hex(struct parser_params *parser, size_t *numlen)
11490 {
11491     int c;
11492 
11493     c = scan_hex(lex_p, 2, numlen);
11494     if (!*numlen) {
11495         yyerror("invalid hex escape");
11496         return 0;
11497     }
11498     lex_p += *numlen;
11499     return c;
11500 }
11501 
11502 #define tokcopy(n) memcpy(tokspace(n), lex_p - (n), (n))
11503 
11504 static int
11505 parser_tokadd_utf8(struct parser_params *parser, rb_encoding **encp,
11506                    int string_literal, int symbol_literal, int regexp_literal)
11507 {
11508     /*
11509      * If string_literal is true, then we allow multiple codepoints
11510      * in \u{}, and add the codepoints to the current token.
11511      * Otherwise we're parsing a character literal and return a single
11512      * codepoint without adding it
11513      */
11514 
11515     int codepoint;
11516     size_t numlen;
11517 
11518     if (regexp_literal) { tokadd('\\'); tokadd('u'); }
11519 
11520     if (peek('{')) {  /* handle \u{...} form */
11521         do {
11522             if (regexp_literal) { tokadd(*lex_p); }
11523             nextc();
11524             codepoint = scan_hex(lex_p, 6, &numlen);
11525             if (numlen == 0)  {
11526                 yyerror("invalid Unicode escape");
11527                 return 0;
11528             }
11529             if (codepoint > 0x10ffff) {
11530                 yyerror("invalid Unicode codepoint (too large)");
11531                 return 0;
11532             }
11533             lex_p += numlen;
11534             if (regexp_literal) {
11535                 tokcopy((int)numlen);
11536             }
11537             else if (codepoint >= 0x80) {
11538                 *encp = UTF8_ENC();
11539                 if (string_literal) tokaddmbc(codepoint, *encp);
11540             }
11541             else if (string_literal) {
11542                 tokadd(codepoint);
11543             }
11544         } while (string_literal && (peek(' ') || peek('\t')));
11545 
11546         if (!peek('}')) {
11547             yyerror("unterminated Unicode escape");
11548             return 0;
11549         }
11550 
11551         if (regexp_literal) { tokadd('}'); }
11552         nextc();
11553     }
11554     else {                      /* handle \uxxxx form */
11555         codepoint = scan_hex(lex_p, 4, &numlen);
11556         if (numlen < 4) {
11557             yyerror("invalid Unicode escape");
11558             return 0;
11559         }
11560         lex_p += 4;
11561         if (regexp_literal) {
11562             tokcopy(4);
11563         }
11564         else if (codepoint >= 0x80) {
11565             *encp = UTF8_ENC();
11566             if (string_literal) tokaddmbc(codepoint, *encp);
11567         }
11568         else if (string_literal) {
11569             tokadd(codepoint);
11570         }
11571     }
11572 
11573     return codepoint;
11574 }
11575 
11576 #define ESCAPE_CONTROL 1
11577 #define ESCAPE_META    2
11578 
11579 static int
11580 parser_read_escape(struct parser_params *parser, int flags,
11581                    rb_encoding **encp)
11582 {
11583     int c;
11584     size_t numlen;
11585 
11586     switch (c = nextc()) {
11587       case '\\':        /* Backslash */
11588         return c;
11589 
11590       case 'n': /* newline */
11591         return '\n';
11592 
11593       case 't': /* horizontal tab */
11594         return '\t';
11595 
11596       case 'r': /* carriage-return */
11597         return '\r';
11598 
11599       case 'f': /* form-feed */
11600         return '\f';
11601 
11602       case 'v': /* vertical tab */
11603         return '\13';
11604 
11605       case 'a': /* alarm(bell) */
11606         return '\007';
11607 
11608       case 'e': /* escape */
11609         return 033;
11610 
11611       case '0': case '1': case '2': case '3': /* octal constant */
11612       case '4': case '5': case '6': case '7':
11613         if (flags & (ESCAPE_CONTROL|ESCAPE_META)) goto eof;
11614         pushback(c);
11615         c = scan_oct(lex_p, 3, &numlen);
11616         lex_p += numlen;
11617         return c;
11618 
11619       case 'x': /* hex constant */
11620         if (flags & (ESCAPE_CONTROL|ESCAPE_META)) goto eof;
11621         c = tok_hex(&numlen);
11622         if (numlen == 0) return 0;
11623         return c;
11624 
11625       case 'b': /* backspace */
11626         return '\010';
11627 
11628       case 's': /* space */
11629         return ' ';
11630 
11631       case 'M':
11632         if (flags & ESCAPE_META) goto eof;
11633         if ((c = nextc()) != '-') {
11634             pushback(c);
11635             goto eof;
11636         }
11637         if ((c = nextc()) == '\\') {
11638             if (peek('u')) goto eof;
11639             return read_escape(flags|ESCAPE_META, encp) | 0x80;
11640         }
11641         else if (c == -1 || !ISASCII(c)) goto eof;
11642         else {
11643             return ((c & 0xff) | 0x80);
11644         }
11645 
11646       case 'C':
11647         if ((c = nextc()) != '-') {
11648             pushback(c);
11649             goto eof;
11650         }
11651       case 'c':
11652         if (flags & ESCAPE_CONTROL) goto eof;
11653         if ((c = nextc())== '\\') {
11654             if (peek('u')) goto eof;
11655             c = read_escape(flags|ESCAPE_CONTROL, encp);
11656         }
11657         else if (c == '?')
11658             return 0177;
11659         else if (c == -1 || !ISASCII(c)) goto eof;
11660         return c & 0x9f;
11661 
11662       eof:
11663       case -1:
11664         yyerror("Invalid escape character syntax");
11665         return '\0';
11666 
11667       default:
11668         return c;
11669     }
11670 }
11671 
11672 static void
11673 parser_tokaddmbc(struct parser_params *parser, int c, rb_encoding *enc)
11674 {
11675     int len = rb_enc_codelen(c, enc);
11676     rb_enc_mbcput(c, tokspace(len), enc);
11677 }
11678 
11679 static int
11680 parser_tokadd_escape(struct parser_params *parser, rb_encoding **encp)
11681 {
11682     int c;
11683     int flags = 0;
11684     size_t numlen;
11685 
11686   first:
11687     switch (c = nextc()) {
11688       case '\n':
11689         return 0;               /* just ignore */
11690 
11691       case '0': case '1': case '2': case '3': /* octal constant */
11692       case '4': case '5': case '6': case '7':
11693         if (flags & (ESCAPE_CONTROL|ESCAPE_META)) goto eof;
11694         {
11695             ruby_scan_oct(--lex_p, 3, &numlen);
11696             if (numlen == 0) goto eof;
11697             lex_p += numlen;
11698             tokcopy((int)numlen + 1);
11699         }
11700         return 0;
11701 
11702       case 'x': /* hex constant */
11703         if (flags & (ESCAPE_CONTROL|ESCAPE_META)) goto eof;
11704         {
11705             tok_hex(&numlen);
11706             if (numlen == 0) goto eof;
11707             tokcopy((int)numlen + 2);
11708         }
11709         return 0;
11710 
11711       case 'M':
11712         if (flags & ESCAPE_META) goto eof;
11713         if ((c = nextc()) != '-') {
11714             pushback(c);
11715             goto eof;
11716         }
11717         tokcopy(3);
11718         flags |= ESCAPE_META;
11719         goto escaped;
11720 
11721       case 'C':
11722         if (flags & ESCAPE_CONTROL) goto eof;
11723         if ((c = nextc()) != '-') {
11724             pushback(c);
11725             goto eof;
11726         }
11727         tokcopy(3);
11728         goto escaped;
11729 
11730       case 'c':
11731         if (flags & ESCAPE_CONTROL) goto eof;
11732         tokcopy(2);
11733         flags |= ESCAPE_CONTROL;
11734       escaped:
11735         if ((c = nextc()) == '\\') {
11736             goto first;
11737         }
11738         else if (c == -1) goto eof;
11739         tokadd(c);
11740         return 0;
11741 
11742       eof:
11743       case -1:
11744         yyerror("Invalid escape character syntax");
11745         return -1;
11746 
11747       default:
11748         tokadd('\\');
11749         tokadd(c);
11750     }
11751     return 0;
11752 }
11753 
11754 extern int rb_char_to_option_kcode(int c, int *option, int *kcode);
11755 
11756 static int
11757 parser_regx_options(struct parser_params *parser)
11758 {
11759     int kcode = 0;
11760     int kopt = 0;
11761     int options = 0;
11762     int c, opt, kc;
11763 
11764     newtok();
11765     while (c = nextc(), ISALPHA(c)) {
11766         if (c == 'o') {
11767             options |= RE_OPTION_ONCE;
11768         }
11769         else if (rb_char_to_option_kcode(c, &opt, &kc)) {
11770             if (kc >= 0) {
11771                 if (kc != rb_ascii8bit_encindex()) kcode = c;
11772                 kopt = opt;
11773             }
11774             else {
11775                 options |= opt;
11776             }
11777         }
11778         else {
11779             tokadd(c);
11780         }
11781     }
11782     options |= kopt;
11783     pushback(c);
11784     if (toklen()) {
11785         tokfix();
11786         compile_error(PARSER_ARG "unknown regexp option%s - %s",
11787                       toklen() > 1 ? "s" : "", tok());
11788     }
11789     return options | RE_OPTION_ENCODING(kcode);
11790 }
11791 
11792 static void
11793 dispose_string(VALUE str)
11794 {
11795     /* TODO: should use another API? */
11796     if (RBASIC(str)->flags & RSTRING_NOEMBED)
11797         xfree(RSTRING_PTR(str));
11798     rb_gc_force_recycle(str);
11799 }
11800 
11801 static int
11802 parser_tokadd_mbchar(struct parser_params *parser, int c)
11803 {
11804     int len = parser_precise_mbclen();
11805     if (!MBCLEN_CHARFOUND_P(len)) {
11806         compile_error(PARSER_ARG "invalid multibyte char (%s)", parser_encoding_name());
11807         return -1;
11808     }
11809     tokadd(c);
11810     lex_p += --len;
11811     if (len > 0) tokcopy(len);
11812     return c;
11813 }
11814 
11815 #define tokadd_mbchar(c) parser_tokadd_mbchar(parser, c)
11816 
11817 static int
11818 parser_tokadd_string(struct parser_params *parser,
11819                      int func, int term, int paren, long *nest,
11820                      rb_encoding **encp)
11821 {
11822     int c;
11823     int has_nonascii = 0;
11824     rb_encoding *enc = *encp;
11825     char *errbuf = 0;
11826     static const char mixed_msg[] = "%s mixed within %s source";
11827 
11828 #define mixed_error(enc1, enc2) if (!errbuf) {  \
11829         size_t len = sizeof(mixed_msg) - 4;     \
11830         len += strlen(rb_enc_name(enc1));       \
11831         len += strlen(rb_enc_name(enc2));       \
11832         errbuf = ALLOCA_N(char, len);           \
11833         snprintf(errbuf, len, mixed_msg,        \
11834                  rb_enc_name(enc1),             \
11835                  rb_enc_name(enc2));            \
11836         yyerror(errbuf);                        \
11837     }
11838 #define mixed_escape(beg, enc1, enc2) do {      \
11839         const char *pos = lex_p;                \
11840         lex_p = beg;                            \
11841         mixed_error(enc1, enc2);                \
11842         lex_p = pos;                            \
11843     } while (0)
11844 
11845     while ((c = nextc()) != -1) {
11846         if (paren && c == paren) {
11847             ++*nest;
11848         }
11849         else if (c == term) {
11850             if (!nest || !*nest) {
11851                 pushback(c);
11852                 break;
11853             }
11854             --*nest;
11855         }
11856         else if ((func & STR_FUNC_EXPAND) && c == '#' && lex_p < lex_pend) {
11857             int c2 = *lex_p;
11858             if (c2 == '$' || c2 == '@' || c2 == '{') {
11859                 pushback(c);
11860                 break;
11861             }
11862         }
11863         else if (c == '\\') {
11864             const char *beg = lex_p - 1;
11865             c = nextc();
11866             switch (c) {
11867               case '\n':
11868                 if (func & STR_FUNC_QWORDS) break;
11869                 if (func & STR_FUNC_EXPAND) continue;
11870                 tokadd('\\');
11871                 break;
11872 
11873               case '\\':
11874                 if (func & STR_FUNC_ESCAPE) tokadd(c);
11875                 break;
11876 
11877               case 'u':
11878                 if ((func & STR_FUNC_EXPAND) == 0) {
11879                     tokadd('\\');
11880                     break;
11881                 }
11882                 parser_tokadd_utf8(parser, &enc, 1,
11883                                    func & STR_FUNC_SYMBOL,
11884                                    func & STR_FUNC_REGEXP);
11885                 if (has_nonascii && enc != *encp) {
11886                     mixed_escape(beg, enc, *encp);
11887                 }
11888                 continue;
11889 
11890               default:
11891                 if (func & STR_FUNC_REGEXP) {
11892                     pushback(c);
11893                     if ((c = tokadd_escape(&enc)) < 0)
11894                         return -1;
11895                     if (has_nonascii && enc != *encp) {
11896                         mixed_escape(beg, enc, *encp);
11897                     }
11898                     continue;
11899                 }
11900                 else if (func & STR_FUNC_EXPAND) {
11901                     pushback(c);
11902                     if (func & STR_FUNC_ESCAPE) tokadd('\\');
11903                     c = read_escape(0, &enc);
11904                 }
11905                 else if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) {
11906                     /* ignore backslashed spaces in %w */
11907                 }
11908                 else if (c != term && !(paren && c == paren)) {
11909                     tokadd('\\');
11910                     pushback(c);
11911                     continue;
11912                 }
11913             }
11914         }
11915         else if (!parser_isascii()) {
11916             has_nonascii = 1;
11917             if (enc != *encp) {
11918                 mixed_error(enc, *encp);
11919                 continue;
11920             }
11921             if (tokadd_mbchar(c) == -1) return -1;
11922             continue;
11923         }
11924         else if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) {
11925             pushback(c);
11926             break;
11927         }
11928         if (c & 0x80) {
11929             has_nonascii = 1;
11930             if (enc != *encp) {
11931                 mixed_error(enc, *encp);
11932                 continue;
11933             }
11934         }
11935         tokadd(c);
11936     }
11937     *encp = enc;
11938     return c;
11939 }
11940 
11941 #define NEW_STRTERM(func, term, paren) \
11942         rb_node_newnode(NODE_STRTERM, (func), (term) | ((paren) << (CHAR_BIT * 2)), 0)
11943 
11944 static int
11945 parser_parse_string(struct parser_params *parser, NODE *quote)
11946 {
11947     int func = (int)quote->nd_func;
11948     int term = nd_term(quote);
11949     int paren = nd_paren(quote);
11950     int c, space = 0;
11951     rb_encoding *enc = parser->enc;
11952 
11953     if (func == -1) return tSTRING_END;
11954     c = nextc();
11955     if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) {
11956         do {c = nextc();} while (ISSPACE(c));
11957         space = 1;
11958     }
11959     if (c == term && !quote->nd_nest) {
11960         if (func & STR_FUNC_QWORDS) {
11961             quote->nd_func = -1;
11962             return ' ';
11963         }
11964         if (!(func & STR_FUNC_REGEXP)) return tSTRING_END;
11965         set_yylval_num(regx_options());
11966         return tREGEXP_END;
11967     }
11968     if (space) {
11969         pushback(c);
11970         return ' ';
11971     }
11972     newtok();
11973     if ((func & STR_FUNC_EXPAND) && c == '#') {
11974         switch (c = nextc()) {
11975           case '$':
11976           case '@':
11977             pushback(c);
11978             return tSTRING_DVAR;
11979           case '{':
11980             return tSTRING_DBEG;
11981         }
11982         tokadd('#');
11983     }
11984     pushback(c);
11985     if (tokadd_string(func, term, paren, &quote->nd_nest,
11986                       &enc) == -1) {
11987         ruby_sourceline = nd_line(quote);
11988         if (func & STR_FUNC_REGEXP) {
11989             if (parser->eofp)
11990                 compile_error(PARSER_ARG "unterminated regexp meets end of file");
11991             return tREGEXP_END;
11992         }
11993         else {
11994             if (parser->eofp)
11995                 compile_error(PARSER_ARG "unterminated string meets end of file");
11996             return tSTRING_END;
11997         }
11998     }
11999 
12000     tokfix();
12001     set_yylval_str(STR_NEW3(tok(), toklen(), enc, func));
12002     return tSTRING_CONTENT;
12003 }
12004 
12005 static int
12006 parser_heredoc_identifier(struct parser_params *parser)
12007 {
12008     int c = nextc(), term, func = 0;
12009     long len;
12010 
12011     if (c == '-') {
12012         c = nextc();
12013         func = STR_FUNC_INDENT;
12014     }
12015     switch (c) {
12016       case '\'':
12017         func |= str_squote; goto quoted;
12018       case '"':
12019         func |= str_dquote; goto quoted;
12020       case '`':
12021         func |= str_xquote;
12022       quoted:
12023         newtok();
12024         tokadd(func);
12025         term = c;
12026         while ((c = nextc()) != -1 && c != term) {
12027             if (tokadd_mbchar(c) == -1) return 0;
12028         }
12029         if (c == -1) {
12030             compile_error(PARSER_ARG "unterminated here document identifier");
12031             return 0;
12032         }
12033         break;
12034 
12035       default:
12036         if (!parser_is_identchar()) {
12037             pushback(c);
12038             if (func & STR_FUNC_INDENT) {
12039                 pushback('-');
12040             }
12041             return 0;
12042         }
12043         newtok();
12044         term = '"';
12045         tokadd(func |= str_dquote);
12046         do {
12047             if (tokadd_mbchar(c) == -1) return 0;
12048         } while ((c = nextc()) != -1 && parser_is_identchar());
12049         pushback(c);
12050         break;
12051     }
12052 
12053     tokfix();
12054 #ifdef RIPPER
12055     ripper_dispatch_scan_event(parser, tHEREDOC_BEG);
12056 #endif
12057     len = lex_p - lex_pbeg;
12058     lex_goto_eol(parser);
12059     lex_strterm = rb_node_newnode(NODE_HEREDOC,
12060                                   STR_NEW(tok(), toklen()),     /* nd_lit */
12061                                   len,                          /* nd_nth */
12062                                   lex_lastline);                /* nd_orig */
12063     nd_set_line(lex_strterm, ruby_sourceline);
12064     ripper_flush(parser);
12065     return term == '`' ? tXSTRING_BEG : tSTRING_BEG;
12066 }
12067 
12068 static void
12069 parser_heredoc_restore(struct parser_params *parser, NODE *here)
12070 {
12071     VALUE line;
12072 
12073     line = here->nd_orig;
12074     lex_lastline = line;
12075     lex_pbeg = RSTRING_PTR(line);
12076     lex_pend = lex_pbeg + RSTRING_LEN(line);
12077     lex_p = lex_pbeg + here->nd_nth;
12078     heredoc_end = ruby_sourceline;
12079     ruby_sourceline = nd_line(here);
12080     dispose_string(here->nd_lit);
12081     rb_gc_force_recycle((VALUE)here);
12082     ripper_flush(parser);
12083 }
12084 
12085 static int
12086 parser_whole_match_p(struct parser_params *parser,
12087     const char *eos, long len, int indent)
12088 {
12089     const char *p = lex_pbeg;
12090     long n;
12091 
12092     if (indent) {
12093         while (*p && ISSPACE(*p)) p++;
12094     }
12095     n = lex_pend - (p + len);
12096     if (n < 0 || (n > 0 && p[len] != '\n' && p[len] != '\r')) return FALSE;
12097     return strncmp(eos, p, len) == 0;
12098 }
12099 
12100 static int
12101 parser_here_document(struct parser_params *parser, NODE *here)
12102 {
12103     int c, func, indent = 0;
12104     const char *eos, *p, *pend;
12105     long len;
12106     VALUE str = 0;
12107     rb_encoding *enc = parser->enc;
12108 
12109     eos = RSTRING_PTR(here->nd_lit);
12110     len = RSTRING_LEN(here->nd_lit) - 1;
12111     indent = (func = *eos++) & STR_FUNC_INDENT;
12112 
12113     if ((c = nextc()) == -1) {
12114       error:
12115         compile_error(PARSER_ARG "can't find string \"%s\" anywhere before EOF", eos);
12116 #ifdef RIPPER
12117         if (NIL_P(parser->delayed)) {
12118             ripper_dispatch_scan_event(parser, tSTRING_CONTENT);
12119         }
12120         else {
12121             if (str ||
12122                 ((len = lex_p - parser->tokp) > 0 &&
12123                  (str = STR_NEW3(parser->tokp, len, enc, func), 1))) {
12124                 rb_str_append(parser->delayed, str);
12125             }
12126             ripper_dispatch_delayed_token(parser, tSTRING_CONTENT);
12127         }
12128         lex_goto_eol(parser);
12129 #endif
12130       restore:
12131         heredoc_restore(lex_strterm);
12132         lex_strterm = 0;
12133         return 0;
12134     }
12135     if (was_bol() && whole_match_p(eos, len, indent)) {
12136         heredoc_restore(lex_strterm);
12137         return tSTRING_END;
12138     }
12139 
12140     if (!(func & STR_FUNC_EXPAND)) {
12141         do {
12142             p = RSTRING_PTR(lex_lastline);
12143             pend = lex_pend;
12144             if (pend > p) {
12145                 switch (pend[-1]) {
12146                   case '\n':
12147                     if (--pend == p || pend[-1] != '\r') {
12148                         pend++;
12149                         break;
12150                     }
12151                   case '\r':
12152                     --pend;
12153                 }
12154             }
12155             if (str)
12156                 rb_str_cat(str, p, pend - p);
12157             else
12158                 str = STR_NEW(p, pend - p);
12159             if (pend < lex_pend) rb_str_cat(str, "\n", 1);
12160             lex_goto_eol(parser);
12161             if (nextc() == -1) {
12162                 if (str) dispose_string(str);
12163                 goto error;
12164             }
12165         } while (!whole_match_p(eos, len, indent));
12166     }
12167     else {
12168         /*      int mb = ENC_CODERANGE_7BIT, *mbp = &mb;*/
12169         newtok();
12170         if (c == '#') {
12171             switch (c = nextc()) {
12172               case '$':
12173               case '@':
12174                 pushback(c);
12175                 return tSTRING_DVAR;
12176               case '{':
12177                 return tSTRING_DBEG;
12178             }
12179             tokadd('#');
12180         }
12181         do {
12182             pushback(c);
12183             if ((c = tokadd_string(func, '\n', 0, NULL, &enc)) == -1) {
12184                 if (parser->eofp) goto error;
12185                 goto restore;
12186             }
12187             if (c != '\n') {
12188                 set_yylval_str(STR_NEW3(tok(), toklen(), enc, func));
12189                 return tSTRING_CONTENT;
12190             }
12191             tokadd(nextc());
12192             /*      if (mbp && mb == ENC_CODERANGE_UNKNOWN) mbp = 0;*/
12193             if ((c = nextc()) == -1) goto error;
12194         } while (!whole_match_p(eos, len, indent));
12195         str = STR_NEW3(tok(), toklen(), enc, func);
12196     }
12197 #ifdef RIPPER
12198     if (!NIL_P(parser->delayed))
12199         ripper_dispatch_delayed_token(parser, tSTRING_CONTENT);
12200     lex_goto_eol(parser);
12201     ripper_dispatch_ignored_scan_event(parser, tHEREDOC_END);
12202 #endif
12203     heredoc_restore(lex_strterm);
12204     lex_strterm = NEW_STRTERM(-1, 0, 0);
12205     set_yylval_str(str);
12206     return tSTRING_CONTENT;
12207 }
12208 
12209 #include "lex.c"
12210 
12211 static void
12212 arg_ambiguous_gen(struct parser_params *parser)
12213 {
12214 #ifndef RIPPER
12215     rb_warning0("ambiguous first argument; put parentheses or even spaces");
12216 #else
12217     dispatch0(arg_ambiguous);
12218 #endif
12219 }
12220 #define arg_ambiguous() (arg_ambiguous_gen(parser), 1)
12221 
12222 static ID
12223 formal_argument_gen(struct parser_params *parser, ID lhs)
12224 {
12225 #ifndef RIPPER
12226     if (!is_local_id(lhs))
12227         yyerror("formal argument must be local variable");
12228 #endif
12229     shadowing_lvar(lhs);
12230     return lhs;
12231 }
12232 
12233 static int
12234 lvar_defined_gen(struct parser_params *parser, ID id)
12235 {
12236     return (dyna_in_block() && dvar_defined(id)) || local_id(id);
12237 }
12238 
12239 /* emacsen -*- hack */
12240 static long
12241 parser_encode_length(struct parser_params *parser, const char *name, long len)
12242 {
12243     long nlen;
12244 
12245     if (len > 5 && name[nlen = len - 5] == '-') {
12246         if (rb_memcicmp(name + nlen + 1, "unix", 4) == 0)
12247             return nlen;
12248     }
12249     if (len > 4 && name[nlen = len - 5] == '-') {
12250         if (rb_memcicmp(name + nlen + 1, "dos", 3) == 0)
12251             return nlen;
12252         if (rb_memcicmp(name + nlen + 1, "mac", 3) == 0)
12253             return nlen;
12254     }
12255     return len;
12256 }
12257 
12258 static void
12259 parser_set_encode(struct parser_params *parser, const char *name)
12260 {
12261     int idx = rb_enc_find_index(name);
12262     rb_encoding *enc;
12263     VALUE excargs[3];
12264 
12265     if (idx < 0) {
12266         VALUE rb_make_backtrace(void);
12267         VALUE rb_make_exception(int, VALUE*);
12268 
12269         excargs[1] = rb_sprintf("unknown encoding name: %s", name);
12270       error:
12271         excargs[0] = rb_eArgError;
12272         excargs[2] = rb_make_backtrace();
12273         rb_ary_unshift(excargs[2], rb_sprintf("%s:%d", ruby_sourcefile, ruby_sourceline));
12274         rb_exc_raise(rb_make_exception(3, excargs));
12275     }
12276     enc = rb_enc_from_index(idx);
12277     if (!rb_enc_asciicompat(enc)) {
12278         excargs[1] = rb_sprintf("%s is not ASCII compatible", rb_enc_name(enc));
12279         goto error;
12280     }
12281     parser->enc = enc;
12282 }
12283 
12284 static int
12285 comment_at_top(struct parser_params *parser)
12286 {
12287     const char *p = lex_pbeg, *pend = lex_p - 1;
12288     if (parser->line_count != (parser->has_shebang ? 2 : 1)) return 0;
12289     while (p < pend) {
12290         if (!ISSPACE(*p)) return 0;
12291         p++;
12292     }
12293     return 1;
12294 }
12295 
12296 #ifndef RIPPER
12297 typedef long (*rb_magic_comment_length_t)(struct parser_params *parser, const char *name, long len);
12298 typedef void (*rb_magic_comment_setter_t)(struct parser_params *parser, const char *name, const char *val);
12299 
12300 static void
12301 magic_comment_encoding(struct parser_params *parser, const char *name, const char *val)
12302 {
12303     if (!comment_at_top(parser)) {
12304         return;
12305     }
12306     parser_set_encode(parser, val);
12307 }
12308 
12309 struct magic_comment {
12310     const char *name;
12311     rb_magic_comment_setter_t func;
12312     rb_magic_comment_length_t length;
12313 };
12314 
12315 static const struct magic_comment magic_comments[] = {
12316     {"coding", magic_comment_encoding, parser_encode_length},
12317     {"encoding", magic_comment_encoding, parser_encode_length},
12318 };
12319 #endif
12320 
12321 static const char *
12322 magic_comment_marker(const char *str, long len)
12323 {
12324     long i = 2;
12325 
12326     while (i < len) {
12327         switch (str[i]) {
12328           case '-':
12329             if (str[i-1] == '*' && str[i-2] == '-') {
12330                 return str + i + 1;
12331             }
12332             i += 2;
12333             break;
12334           case '*':
12335             if (i + 1 >= len) return 0;
12336             if (str[i+1] != '-') {
12337                 i += 4;
12338             }
12339             else if (str[i-1] != '-') {
12340                 i += 2;
12341             }
12342             else {
12343                 return str + i + 2;
12344             }
12345             break;
12346           default:
12347             i += 3;
12348             break;
12349         }
12350     }
12351     return 0;
12352 }
12353 
12354 static int
12355 parser_magic_comment(struct parser_params *parser, const char *str, long len)
12356 {
12357     VALUE name = 0, val = 0;
12358     const char *beg, *end, *vbeg, *vend;
12359 #define str_copy(_s, _p, _n) ((_s) \
12360         ? (rb_str_resize((_s), (_n)), \
12361            MEMCPY(RSTRING_PTR(_s), (_p), char, (_n)), (_s)) \
12362         : ((_s) = STR_NEW((_p), (_n))))
12363 
12364     if (len <= 7) return FALSE;
12365     if (!(beg = magic_comment_marker(str, len))) return FALSE;
12366     if (!(end = magic_comment_marker(beg, str + len - beg))) return FALSE;
12367     str = beg;
12368     len = end - beg - 3;
12369 
12370     /* %r"([^\\s\'\":;]+)\\s*:\\s*(\"(?:\\\\.|[^\"])*\"|[^\"\\s;]+)[\\s;]*" */
12371     while (len > 0) {
12372 #ifndef RIPPER
12373         const struct magic_comment *p = magic_comments;
12374 #endif
12375         char *s;
12376         int i;
12377         long n = 0;
12378 
12379         for (; len > 0 && *str; str++, --len) {
12380             switch (*str) {
12381               case '\'': case '"': case ':': case ';':
12382                 continue;
12383             }
12384             if (!ISSPACE(*str)) break;
12385         }
12386         for (beg = str; len > 0; str++, --len) {
12387             switch (*str) {
12388               case '\'': case '"': case ':': case ';':
12389                 break;
12390               default:
12391                 if (ISSPACE(*str)) break;
12392                 continue;
12393             }
12394             break;
12395         }
12396         for (end = str; len > 0 && ISSPACE(*str); str++, --len);
12397         if (!len) break;
12398         if (*str != ':') continue;
12399 
12400         do str++; while (--len > 0 && ISSPACE(*str));
12401         if (!len) break;
12402         if (*str == '"') {
12403             for (vbeg = ++str; --len > 0 && *str != '"'; str++) {
12404                 if (*str == '\\') {
12405                     --len;
12406                     ++str;
12407                 }
12408             }
12409             vend = str;
12410             if (len) {
12411                 --len;
12412                 ++str;
12413             }
12414         }
12415         else {
12416             for (vbeg = str; len > 0 && *str != '"' && *str != ';' && !ISSPACE(*str); --len, str++);
12417             vend = str;
12418         }
12419         while (len > 0 && (*str == ';' || ISSPACE(*str))) --len, str++;
12420 
12421         n = end - beg;
12422         str_copy(name, beg, n);
12423         s = RSTRING_PTR(name);
12424         for (i = 0; i < n; ++i) {
12425             if (s[i] == '-') s[i] = '_';
12426         }
12427 #ifndef RIPPER
12428         do {
12429             if (STRNCASECMP(p->name, s, n) == 0) {
12430                 n = vend - vbeg;
12431                 if (p->length) {
12432                     n = (*p->length)(parser, vbeg, n);
12433                 }
12434                 str_copy(val, vbeg, n);
12435                 (*p->func)(parser, s, RSTRING_PTR(val));
12436                 break;
12437             }
12438         } while (++p < magic_comments + numberof(magic_comments));
12439 #else
12440         dispatch2(magic_comment, name, val);
12441 #endif
12442     }
12443 
12444     return TRUE;
12445 }
12446 
12447 static void
12448 set_file_encoding(struct parser_params *parser, const char *str, const char *send)
12449 {
12450     int sep = 0;
12451     const char *beg = str;
12452     VALUE s;
12453 
12454     for (;;) {
12455         if (send - str <= 6) return;
12456         switch (str[6]) {
12457           case 'C': case 'c': str += 6; continue;
12458           case 'O': case 'o': str += 5; continue;
12459           case 'D': case 'd': str += 4; continue;
12460           case 'I': case 'i': str += 3; continue;
12461           case 'N': case 'n': str += 2; continue;
12462           case 'G': case 'g': str += 1; continue;
12463           case '=': case ':':
12464             sep = 1;
12465             str += 6;
12466             break;
12467           default:
12468             str += 6;
12469             if (ISSPACE(*str)) break;
12470             continue;
12471         }
12472         if (STRNCASECMP(str-6, "coding", 6) == 0) break;
12473     }
12474     for (;;) {
12475         do {
12476             if (++str >= send) return;
12477         } while (ISSPACE(*str));
12478         if (sep) break;
12479         if (*str != '=' && *str != ':') return;
12480         sep = 1;
12481         str++;
12482     }
12483     beg = str;
12484     while ((*str == '-' || *str == '_' || ISALNUM(*str)) && ++str < send);
12485     s = rb_str_new(beg, parser_encode_length(parser, beg, str - beg));
12486     parser_set_encode(parser, RSTRING_PTR(s));
12487     rb_str_resize(s, 0);
12488 }
12489 
12490 static void
12491 parser_prepare(struct parser_params *parser)
12492 {
12493     int c = nextc();
12494     switch (c) {
12495       case '#':
12496         if (peek('!')) parser->has_shebang = 1;
12497         break;
12498       case 0xef:                /* UTF-8 BOM marker */
12499         if (lex_pend - lex_p >= 2 &&
12500             (unsigned char)lex_p[0] == 0xbb &&
12501             (unsigned char)lex_p[1] == 0xbf) {
12502             parser->enc = rb_utf8_encoding();
12503             lex_p += 2;
12504             lex_pbeg = lex_p;
12505             return;
12506         }
12507         break;
12508       case EOF:
12509         return;
12510     }
12511     pushback(c);
12512     parser->enc = rb_enc_get(lex_lastline);
12513 }
12514 
12515 #define IS_ARG() (lex_state == EXPR_ARG || lex_state == EXPR_CMDARG)
12516 #define IS_END() (lex_state == EXPR_END || lex_state == EXPR_ENDARG || lex_state == EXPR_ENDFN)
12517 #define IS_BEG() (lex_state == EXPR_BEG || lex_state == EXPR_MID || lex_state == EXPR_VALUE || lex_state == EXPR_CLASS)
12518 #define IS_SPCARG(c) (IS_ARG() && space_seen && !ISSPACE(c))
12519 
12520 #ifndef RIPPER
12521 #define ambiguous_operator(op, syn) ( \
12522     rb_warning0("`"op"' after local variable is interpreted as binary operator"), \
12523     rb_warning0("even though it seems like "syn""))
12524 #else
12525 #define ambiguous_operator(op, syn) dispatch2(operator_ambiguous, ripper_intern(op), rb_str_new_cstr(syn))
12526 #endif
12527 #define warn_balanced(op, syn) \
12528     (last_state != EXPR_CLASS && last_state != EXPR_DOT && \
12529      last_state != EXPR_FNAME && last_state != EXPR_ENDFN && \
12530      last_state != EXPR_ENDARG && \
12531      space_seen && !ISSPACE(c) && \
12532      (ambiguous_operator(op, syn), 0))
12533 
12534 static int
12535 parser_yylex(struct parser_params *parser)
12536 {
12537     register int c;
12538     int space_seen = 0;
12539     int cmd_state;
12540     enum lex_state_e last_state;
12541     rb_encoding *enc;
12542     int mb;
12543 #ifdef RIPPER
12544     int fallthru = FALSE;
12545 #endif
12546 
12547     if (lex_strterm) {
12548         int token;
12549         if (nd_type(lex_strterm) == NODE_HEREDOC) {
12550             token = here_document(lex_strterm);
12551             if (token == tSTRING_END) {
12552                 lex_strterm = 0;
12553                 lex_state = EXPR_END;
12554             }
12555         }
12556         else {
12557             token = parse_string(lex_strterm);
12558             if (token == tSTRING_END || token == tREGEXP_END) {
12559                 rb_gc_force_recycle((VALUE)lex_strterm);
12560                 lex_strterm = 0;
12561                 lex_state = EXPR_END;
12562             }
12563         }
12564         return token;
12565     }
12566     cmd_state = command_start;
12567     command_start = FALSE;
12568   retry:
12569     last_state = lex_state;
12570     switch (c = nextc()) {
12571       case '\0':                /* NUL */
12572       case '\004':              /* ^D */
12573       case '\032':              /* ^Z */
12574       case -1:                  /* end of script. */
12575         return 0;
12576 
12577         /* white spaces */
12578       case ' ': case '\t': case '\f': case '\r':
12579       case '\13': /* '\v' */
12580         space_seen = 1;
12581 #ifdef RIPPER
12582         while ((c = nextc())) {
12583             switch (c) {
12584               case ' ': case '\t': case '\f': case '\r':
12585               case '\13': /* '\v' */
12586                 break;
12587               default:
12588                 goto outofloop;
12589             }
12590         }
12591       outofloop:
12592         pushback(c);
12593         ripper_dispatch_scan_event(parser, tSP);
12594 #endif
12595         goto retry;
12596 
12597       case '#':         /* it's a comment */
12598         /* no magic_comment in shebang line */
12599         if (!parser_magic_comment(parser, lex_p, lex_pend - lex_p)) {
12600             if (comment_at_top(parser)) {
12601                 set_file_encoding(parser, lex_p, lex_pend);
12602             }
12603         }
12604         lex_p = lex_pend;
12605 #ifdef RIPPER
12606         ripper_dispatch_scan_event(parser, tCOMMENT);
12607         fallthru = TRUE;
12608 #endif
12609         /* fall through */
12610       case '\n':
12611         switch (lex_state) {
12612           case EXPR_BEG:
12613           case EXPR_FNAME:
12614           case EXPR_DOT:
12615           case EXPR_CLASS:
12616           case EXPR_VALUE:
12617 #ifdef RIPPER
12618             if (!fallthru) {
12619                 ripper_dispatch_scan_event(parser, tIGNORED_NL);
12620             }
12621             fallthru = FALSE;
12622 #endif
12623             goto retry;
12624           default:
12625             break;
12626         }
12627         while ((c = nextc())) {
12628             switch (c) {
12629               case ' ': case '\t': case '\f': case '\r':
12630               case '\13': /* '\v' */
12631                 space_seen = 1;
12632                 break;
12633               case '.': {
12634                   if ((c = nextc()) != '.') {
12635                       pushback(c);
12636                       pushback('.');
12637                       goto retry;
12638                   }
12639               }
12640               default:
12641                 --ruby_sourceline;
12642                 lex_nextline = lex_lastline;
12643               case -1:          /* EOF no decrement*/
12644                 lex_goto_eol(parser);
12645 #ifdef RIPPER
12646                 if (c != -1) {
12647                     parser->tokp = lex_p;
12648                 }
12649 #endif
12650                 goto normal_newline;
12651             }
12652         }
12653       normal_newline:
12654         command_start = TRUE;
12655         lex_state = EXPR_BEG;
12656         return '\n';
12657 
12658       case '*':
12659         if ((c = nextc()) == '*') {
12660             if ((c = nextc()) == '=') {
12661                 set_yylval_id(tPOW);
12662                 lex_state = EXPR_BEG;
12663                 return tOP_ASGN;
12664             }
12665             pushback(c);
12666             c = tPOW;
12667         }
12668         else {
12669             if (c == '=') {
12670                 set_yylval_id('*');
12671                 lex_state = EXPR_BEG;
12672                 return tOP_ASGN;
12673             }
12674             pushback(c);
12675             if (IS_SPCARG(c)) {
12676                 rb_warning0("`*' interpreted as argument prefix");
12677                 c = tSTAR;
12678             }
12679             else if (IS_BEG()) {
12680                 c = tSTAR;
12681             }
12682             else {
12683                 warn_balanced("*", "argument prefix");
12684                 c = '*';
12685             }
12686         }
12687         switch (lex_state) {
12688           case EXPR_FNAME: case EXPR_DOT:
12689             lex_state = EXPR_ARG; break;
12690           default:
12691             lex_state = EXPR_BEG; break;
12692         }
12693         return c;
12694 
12695       case '!':
12696         c = nextc();
12697         if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
12698             lex_state = EXPR_ARG;
12699             if (c == '@') {
12700                 return '!';
12701             }
12702         }
12703         else {
12704             lex_state = EXPR_BEG;
12705         }
12706         if (c == '=') {
12707             return tNEQ;
12708         }
12709         if (c == '~') {
12710             return tNMATCH;
12711         }
12712         pushback(c);
12713         return '!';
12714 
12715       case '=':
12716         if (was_bol()) {
12717             /* skip embedded rd document */
12718             if (strncmp(lex_p, "begin", 5) == 0 && ISSPACE(lex_p[5])) {
12719 #ifdef RIPPER
12720                 int first_p = TRUE;
12721 
12722                 lex_goto_eol(parser);
12723                 ripper_dispatch_scan_event(parser, tEMBDOC_BEG);
12724 #endif
12725                 for (;;) {
12726                     lex_goto_eol(parser);
12727 #ifdef RIPPER
12728                     if (!first_p) {
12729                         ripper_dispatch_scan_event(parser, tEMBDOC);
12730                     }
12731                     first_p = FALSE;
12732 #endif
12733                     c = nextc();
12734                     if (c == -1) {
12735                         compile_error(PARSER_ARG "embedded document meets end of file");
12736                         return 0;
12737                     }
12738                     if (c != '=') continue;
12739                     if (strncmp(lex_p, "end", 3) == 0 &&
12740                         (lex_p + 3 == lex_pend || ISSPACE(lex_p[3]))) {
12741                         break;
12742                     }
12743                 }
12744                 lex_goto_eol(parser);
12745 #ifdef RIPPER
12746                 ripper_dispatch_scan_event(parser, tEMBDOC_END);
12747 #endif
12748                 goto retry;
12749             }
12750         }
12751 
12752         switch (lex_state) {
12753           case EXPR_FNAME: case EXPR_DOT:
12754             lex_state = EXPR_ARG; break;
12755           default:
12756             lex_state = EXPR_BEG; break;
12757         }
12758         if ((c = nextc()) == '=') {
12759             if ((c = nextc()) == '=') {
12760                 return tEQQ;
12761             }
12762             pushback(c);
12763             return tEQ;
12764         }
12765         if (c == '~') {
12766             return tMATCH;
12767         }
12768         else if (c == '>') {
12769             return tASSOC;
12770         }
12771         pushback(c);
12772         return '=';
12773 
12774       case '<':
12775         last_state = lex_state;
12776         c = nextc();
12777         if (c == '<' &&
12778             lex_state != EXPR_DOT &&
12779             lex_state != EXPR_CLASS &&
12780             !IS_END() &&
12781             (!IS_ARG() || space_seen)) {
12782             int token = heredoc_identifier();
12783             if (token) return token;
12784         }
12785         switch (lex_state) {
12786           case EXPR_FNAME: case EXPR_DOT:
12787             lex_state = EXPR_ARG; break;
12788           default:
12789             lex_state = EXPR_BEG; break;
12790         }
12791         if (c == '=') {
12792             if ((c = nextc()) == '>') {
12793                 return tCMP;
12794             }
12795             pushback(c);
12796             return tLEQ;
12797         }
12798         if (c == '<') {
12799             if ((c = nextc()) == '=') {
12800                 set_yylval_id(tLSHFT);
12801                 lex_state = EXPR_BEG;
12802                 return tOP_ASGN;
12803             }
12804             pushback(c);
12805             warn_balanced("<<", "here document");
12806             return tLSHFT;
12807         }
12808         pushback(c);
12809         return '<';
12810 
12811       case '>':
12812         switch (lex_state) {
12813           case EXPR_FNAME: case EXPR_DOT:
12814             lex_state = EXPR_ARG; break;
12815           default:
12816             lex_state = EXPR_BEG; break;
12817         }
12818         if ((c = nextc()) == '=') {
12819             return tGEQ;
12820         }
12821         if (c == '>') {
12822             if ((c = nextc()) == '=') {
12823                 set_yylval_id(tRSHFT);
12824                 lex_state = EXPR_BEG;
12825                 return tOP_ASGN;
12826             }
12827             pushback(c);
12828             return tRSHFT;
12829         }
12830         pushback(c);
12831         return '>';
12832 
12833       case '"':
12834         lex_strterm = NEW_STRTERM(str_dquote, '"', 0);
12835         return tSTRING_BEG;
12836 
12837       case '`':
12838         if (lex_state == EXPR_FNAME) {
12839             lex_state = EXPR_ENDFN;
12840             return c;
12841         }
12842         if (lex_state == EXPR_DOT) {
12843             if (cmd_state)
12844                 lex_state = EXPR_CMDARG;
12845             else
12846                 lex_state = EXPR_ARG;
12847             return c;
12848         }
12849         lex_strterm = NEW_STRTERM(str_xquote, '`', 0);
12850         return tXSTRING_BEG;
12851 
12852       case '\'':
12853         lex_strterm = NEW_STRTERM(str_squote, '\'', 0);
12854         return tSTRING_BEG;
12855 
12856       case '?':
12857         if (IS_END()) {
12858             lex_state = EXPR_VALUE;
12859             return '?';
12860         }
12861         c = nextc();
12862         if (c == -1) {
12863             compile_error(PARSER_ARG "incomplete character syntax");
12864             return 0;
12865         }
12866         if (rb_enc_isspace(c, parser->enc)) {
12867             if (!IS_ARG()) {
12868                 int c2 = 0;
12869                 switch (c) {
12870                   case ' ':
12871                     c2 = 's';
12872                     break;
12873                   case '\n':
12874                     c2 = 'n';
12875                     break;
12876                   case '\t':
12877                     c2 = 't';
12878                     break;
12879                   case '\v':
12880                     c2 = 'v';
12881                     break;
12882                   case '\r':
12883                     c2 = 'r';
12884                     break;
12885                   case '\f':
12886                     c2 = 'f';
12887                     break;
12888                 }
12889                 if (c2) {
12890                     rb_warnI("invalid character syntax; use ?\\%c", c2);
12891                 }
12892             }
12893           ternary:
12894             pushback(c);
12895             lex_state = EXPR_VALUE;
12896             return '?';
12897         }
12898         newtok();
12899         enc = parser->enc;
12900         if (!parser_isascii()) {
12901             if (tokadd_mbchar(c) == -1) return 0;
12902         }
12903         else if ((rb_enc_isalnum(c, parser->enc) || c == '_') &&
12904                  lex_p < lex_pend && is_identchar(lex_p, lex_pend, parser->enc)) {
12905             goto ternary;
12906         }
12907         else if (c == '\\') {
12908             if (peek('u')) {
12909                 nextc();
12910                 c = parser_tokadd_utf8(parser, &enc, 0, 0, 0);
12911                 if (0x80 <= c) {
12912                     tokaddmbc(c, enc);
12913                 }
12914                 else {
12915                     tokadd(c);
12916                 }
12917             }
12918             else {
12919                 c = read_escape(0, &enc);
12920                 tokadd(c);
12921             }
12922         }
12923         else {
12924             tokadd(c);
12925         }
12926         tokfix();
12927         set_yylval_str(STR_NEW3(tok(), toklen(), enc, 0));
12928         lex_state = EXPR_END;
12929         return tCHAR;
12930 
12931       case '&':
12932         if ((c = nextc()) == '&') {
12933             lex_state = EXPR_BEG;
12934             if ((c = nextc()) == '=') {
12935                 set_yylval_id(tANDOP);
12936                 lex_state = EXPR_BEG;
12937                 return tOP_ASGN;
12938             }
12939             pushback(c);
12940             return tANDOP;
12941         }
12942         else if (c == '=') {
12943             set_yylval_id('&');
12944             lex_state = EXPR_BEG;
12945             return tOP_ASGN;
12946         }
12947         pushback(c);
12948         if (IS_SPCARG(c)) {
12949             rb_warning0("`&' interpreted as argument prefix");
12950             c = tAMPER;
12951         }
12952         else if (IS_BEG()) {
12953             c = tAMPER;
12954         }
12955         else {
12956             warn_balanced("&", "argument prefix");
12957             c = '&';
12958         }
12959         switch (lex_state) {
12960           case EXPR_FNAME: case EXPR_DOT:
12961             lex_state = EXPR_ARG; break;
12962           default:
12963             lex_state = EXPR_BEG;
12964         }
12965         return c;
12966 
12967       case '|':
12968         if ((c = nextc()) == '|') {
12969             lex_state = EXPR_BEG;
12970             if ((c = nextc()) == '=') {
12971                 set_yylval_id(tOROP);
12972                 lex_state = EXPR_BEG;
12973                 return tOP_ASGN;
12974             }
12975             pushback(c);
12976             return tOROP;
12977         }
12978         if (c == '=') {
12979             set_yylval_id('|');
12980             lex_state = EXPR_BEG;
12981             return tOP_ASGN;
12982         }
12983         if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
12984             lex_state = EXPR_ARG;
12985         }
12986         else {
12987             lex_state = EXPR_BEG;
12988         }
12989         pushback(c);
12990         return '|';
12991 
12992       case '+':
12993         c = nextc();
12994         if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
12995             lex_state = EXPR_ARG;
12996             if (c == '@') {
12997                 return tUPLUS;
12998             }
12999             pushback(c);
13000             return '+';
13001         }
13002         if (c == '=') {
13003             set_yylval_id('+');
13004             lex_state = EXPR_BEG;
13005             return tOP_ASGN;
13006         }
13007         if (IS_BEG() || (IS_SPCARG(c) && arg_ambiguous())) {
13008             lex_state = EXPR_BEG;
13009             pushback(c);
13010             if (c != -1 && ISDIGIT(c)) {
13011                 c = '+';
13012                 goto start_num;
13013             }
13014             return tUPLUS;
13015         }
13016         lex_state = EXPR_BEG;
13017         pushback(c);
13018         warn_balanced("+", "unary operator");
13019         return '+';
13020 
13021       case '-':
13022         c = nextc();
13023         if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
13024             lex_state = EXPR_ARG;
13025             if (c == '@') {
13026                 return tUMINUS;
13027             }
13028             pushback(c);
13029             return '-';
13030         }
13031         if (c == '=') {
13032             set_yylval_id('-');
13033             lex_state = EXPR_BEG;
13034             return tOP_ASGN;
13035         }
13036         if (c == '>') {
13037             lex_state = EXPR_ARG;
13038             return tLAMBDA;
13039         }
13040         if (IS_BEG() || (IS_SPCARG(c) && arg_ambiguous())) {
13041             lex_state = EXPR_BEG;
13042             pushback(c);
13043             if (c != -1 && ISDIGIT(c)) {
13044                 return tUMINUS_NUM;
13045             }
13046             return tUMINUS;
13047         }
13048         lex_state = EXPR_BEG;
13049         pushback(c);
13050         warn_balanced("-", "unary operator");
13051         return '-';
13052 
13053       case '.':
13054         lex_state = EXPR_BEG;
13055         if ((c = nextc()) == '.') {
13056             if ((c = nextc()) == '.') {
13057                 return tDOT3;
13058             }
13059             pushback(c);
13060             return tDOT2;
13061         }
13062         pushback(c);
13063         if (c != -1 && ISDIGIT(c)) {
13064             yyerror("no .<digit> floating literal anymore; put 0 before dot");
13065         }
13066         lex_state = EXPR_DOT;
13067         return '.';
13068 
13069       start_num:
13070       case '0': case '1': case '2': case '3': case '4':
13071       case '5': case '6': case '7': case '8': case '9':
13072         {
13073             int is_float, seen_point, seen_e, nondigit;
13074 
13075             is_float = seen_point = seen_e = nondigit = 0;
13076             lex_state = EXPR_END;
13077             newtok();
13078             if (c == '-' || c == '+') {
13079                 tokadd(c);
13080                 c = nextc();
13081             }
13082             if (c == '0') {
13083 #define no_digits() do {yyerror("numeric literal without digits"); return 0;} while (0)
13084                 int start = toklen();
13085                 c = nextc();
13086                 if (c == 'x' || c == 'X') {
13087                     /* hexadecimal */
13088                     c = nextc();
13089                     if (c != -1 && ISXDIGIT(c)) {
13090                         do {
13091                             if (c == '_') {
13092                                 if (nondigit) break;
13093                                 nondigit = c;
13094                                 continue;
13095                             }
13096                             if (!ISXDIGIT(c)) break;
13097                             nondigit = 0;
13098                             tokadd(c);
13099                         } while ((c = nextc()) != -1);
13100                     }
13101                     pushback(c);
13102                     tokfix();
13103                     if (toklen() == start) {
13104                         no_digits();
13105                     }
13106                     else if (nondigit) goto trailing_uc;
13107                     set_yylval_literal(rb_cstr_to_inum(tok(), 16, FALSE));
13108                     return tINTEGER;
13109                 }
13110                 if (c == 'b' || c == 'B') {
13111                     /* binary */
13112                     c = nextc();
13113                     if (c == '0' || c == '1') {
13114                         do {
13115                             if (c == '_') {
13116                                 if (nondigit) break;
13117                                 nondigit = c;
13118                                 continue;
13119                             }
13120                             if (c != '0' && c != '1') break;
13121                             nondigit = 0;
13122                             tokadd(c);
13123                         } while ((c = nextc()) != -1);
13124                     }
13125                     pushback(c);
13126                     tokfix();
13127                     if (toklen() == start) {
13128                         no_digits();
13129                     }
13130                     else if (nondigit) goto trailing_uc;
13131                     set_yylval_literal(rb_cstr_to_inum(tok(), 2, FALSE));
13132                     return tINTEGER;
13133                 }
13134                 if (c == 'd' || c == 'D') {
13135                     /* decimal */
13136                     c = nextc();
13137                     if (c != -1 && ISDIGIT(c)) {
13138                         do {
13139                             if (c == '_') {
13140                                 if (nondigit) break;
13141                                 nondigit = c;
13142                                 continue;
13143                             }
13144                             if (!ISDIGIT(c)) break;
13145                             nondigit = 0;
13146                             tokadd(c);
13147                         } while ((c = nextc()) != -1);
13148                     }
13149                     pushback(c);
13150                     tokfix();
13151                     if (toklen() == start) {
13152                         no_digits();
13153                     }
13154                     else if (nondigit) goto trailing_uc;
13155                     set_yylval_literal(rb_cstr_to_inum(tok(), 10, FALSE));
13156                     return tINTEGER;
13157                 }
13158                 if (c == '_') {
13159                     /* 0_0 */
13160                     goto octal_number;
13161                 }
13162                 if (c == 'o' || c == 'O') {
13163                     /* prefixed octal */
13164                     c = nextc();
13165                     if (c == -1 || c == '_' || !ISDIGIT(c)) {
13166                         no_digits();
13167                     }
13168                 }
13169                 if (c >= '0' && c <= '7') {
13170                     /* octal */
13171                   octal_number:
13172                     do {
13173                         if (c == '_') {
13174                             if (nondigit) break;
13175                             nondigit = c;
13176                             continue;
13177                         }
13178                         if (c < '0' || c > '9') break;
13179                         if (c > '7') goto invalid_octal;
13180                         nondigit = 0;
13181                         tokadd(c);
13182                     } while ((c = nextc()) != -1);
13183                     if (toklen() > start) {
13184                         pushback(c);
13185                         tokfix();
13186                         if (nondigit) goto trailing_uc;
13187                         set_yylval_literal(rb_cstr_to_inum(tok(), 8, FALSE));
13188                         return tINTEGER;
13189                     }
13190                     if (nondigit) {
13191                         pushback(c);
13192                         goto trailing_uc;
13193                     }
13194                 }
13195                 if (c > '7' && c <= '9') {
13196                   invalid_octal:
13197                     yyerror("Invalid octal digit");
13198                 }
13199                 else if (c == '.' || c == 'e' || c == 'E') {
13200                     tokadd('0');
13201                 }
13202                 else {
13203                     pushback(c);
13204                     set_yylval_literal(INT2FIX(0));
13205                     return tINTEGER;
13206                 }
13207             }
13208 
13209             for (;;) {
13210                 switch (c) {
13211                   case '0': case '1': case '2': case '3': case '4':
13212                   case '5': case '6': case '7': case '8': case '9':
13213                     nondigit = 0;
13214                     tokadd(c);
13215                     break;
13216 
13217                   case '.':
13218                     if (nondigit) goto trailing_uc;
13219                     if (seen_point || seen_e) {
13220                         goto decode_num;
13221                     }
13222                     else {
13223                         int c0 = nextc();
13224                         if (c0 == -1 || !ISDIGIT(c0)) {
13225                             pushback(c0);
13226                             goto decode_num;
13227                         }
13228                         c = c0;
13229                     }
13230                     tokadd('.');
13231                     tokadd(c);
13232                     is_float++;
13233                     seen_point++;
13234                     nondigit = 0;
13235                     break;
13236 
13237                   case 'e':
13238                   case 'E':
13239                     if (nondigit) {
13240                         pushback(c);
13241                         c = nondigit;
13242                         goto decode_num;
13243                     }
13244                     if (seen_e) {
13245                         goto decode_num;
13246                     }
13247                     tokadd(c);
13248                     seen_e++;
13249                     is_float++;
13250                     nondigit = c;
13251                     c = nextc();
13252                     if (c != '-' && c != '+') continue;
13253                     tokadd(c);
13254                     nondigit = c;
13255                     break;
13256 
13257                   case '_':     /* `_' in number just ignored */
13258                     if (nondigit) goto decode_num;
13259                     nondigit = c;
13260                     break;
13261 
13262                   default:
13263                     goto decode_num;
13264                 }
13265                 c = nextc();
13266             }
13267 
13268           decode_num:
13269             pushback(c);
13270             if (nondigit) {
13271                 char tmp[30];
13272               trailing_uc:
13273                 snprintf(tmp, sizeof(tmp), "trailing `%c' in number", nondigit);
13274                 yyerror(tmp);
13275             }
13276             tokfix();
13277             if (is_float) {
13278                 double d = strtod(tok(), 0);
13279                 if (errno == ERANGE) {
13280                     rb_warningS("Float %s out of range", tok());
13281                     errno = 0;
13282                 }
13283                 set_yylval_literal(DBL2NUM(d));
13284                 return tFLOAT;
13285             }
13286             set_yylval_literal(rb_cstr_to_inum(tok(), 10, FALSE));
13287             return tINTEGER;
13288         }
13289 
13290       case ')':
13291       case ']':
13292         paren_nest--;
13293       case '}':
13294         COND_LEXPOP();
13295         CMDARG_LEXPOP();
13296         if (c == ')')
13297             lex_state = EXPR_ENDFN;
13298         else
13299             lex_state = EXPR_ENDARG;
13300         return c;
13301 
13302       case ':':
13303         c = nextc();
13304         if (c == ':') {
13305             if (IS_BEG() || lex_state == EXPR_CLASS || IS_SPCARG(-1)) {
13306                 lex_state = EXPR_BEG;
13307                 return tCOLON3;
13308             }
13309             lex_state = EXPR_DOT;
13310             return tCOLON2;
13311         }
13312         if (IS_END() || ISSPACE(c)) {
13313             pushback(c);
13314             warn_balanced(":", "symbol literal");
13315             lex_state = EXPR_BEG;
13316             return ':';
13317         }
13318         switch (c) {
13319           case '\'':
13320             lex_strterm = NEW_STRTERM(str_ssym, c, 0);
13321             break;
13322           case '"':
13323             lex_strterm = NEW_STRTERM(str_dsym, c, 0);
13324             break;
13325           default:
13326             pushback(c);
13327             break;
13328         }
13329         lex_state = EXPR_FNAME;
13330         return tSYMBEG;
13331 
13332       case '/':
13333         if (IS_BEG()) {
13334             lex_strterm = NEW_STRTERM(str_regexp, '/', 0);
13335             return tREGEXP_BEG;
13336         }
13337         if ((c = nextc()) == '=') {
13338             set_yylval_id('/');
13339             lex_state = EXPR_BEG;
13340             return tOP_ASGN;
13341         }
13342         pushback(c);
13343         if (IS_SPCARG(c)) {
13344             arg_ambiguous();
13345             lex_strterm = NEW_STRTERM(str_regexp, '/', 0);
13346             return tREGEXP_BEG;
13347         }
13348         switch (lex_state) {
13349           case EXPR_FNAME: case EXPR_DOT:
13350             lex_state = EXPR_ARG; break;
13351           default:
13352             lex_state = EXPR_BEG; break;
13353         }
13354         warn_balanced("/", "regexp literal");
13355         return '/';
13356 
13357       case '^':
13358         if ((c = nextc()) == '=') {
13359             set_yylval_id('^');
13360             lex_state = EXPR_BEG;
13361             return tOP_ASGN;
13362         }
13363         switch (lex_state) {
13364           case EXPR_FNAME: case EXPR_DOT:
13365             lex_state = EXPR_ARG; break;
13366           default:
13367             lex_state = EXPR_BEG; break;
13368         }
13369         pushback(c);
13370         return '^';
13371 
13372       case ';':
13373         lex_state = EXPR_BEG;
13374         command_start = TRUE;
13375         return ';';
13376 
13377       case ',':
13378         lex_state = EXPR_BEG;
13379         return ',';
13380 
13381       case '~':
13382         if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
13383             if ((c = nextc()) != '@') {
13384                 pushback(c);
13385             }
13386             lex_state = EXPR_ARG;
13387         }
13388         else {
13389             lex_state = EXPR_BEG;
13390         }
13391         return '~';
13392 
13393       case '(':
13394         if (IS_BEG()) {
13395             c = tLPAREN;
13396         }
13397         else if (IS_SPCARG(-1)) {
13398             c = tLPAREN_ARG;
13399         }
13400         paren_nest++;
13401         COND_PUSH(0);
13402         CMDARG_PUSH(0);
13403         lex_state = EXPR_BEG;
13404         return c;
13405 
13406       case '[':
13407         paren_nest++;
13408         if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
13409             lex_state = EXPR_ARG;
13410             if ((c = nextc()) == ']') {
13411                 if ((c = nextc()) == '=') {
13412                     return tASET;
13413                 }
13414                 pushback(c);
13415                 return tAREF;
13416             }
13417             pushback(c);
13418             return '[';
13419         }
13420         else if (IS_BEG()) {
13421             c = tLBRACK;
13422         }
13423         else if (IS_ARG() && space_seen) {
13424             c = tLBRACK;
13425         }
13426         lex_state = EXPR_BEG;
13427         COND_PUSH(0);
13428         CMDARG_PUSH(0);
13429         return c;
13430 
13431       case '{':
13432         if (lpar_beg && lpar_beg == paren_nest) {
13433             lex_state = EXPR_BEG;
13434             lpar_beg = 0;
13435             --paren_nest;
13436             COND_PUSH(0);
13437             CMDARG_PUSH(0);
13438             return tLAMBEG;
13439         }
13440         if (IS_ARG() || lex_state == EXPR_END || lex_state == EXPR_ENDFN)
13441             c = '{';          /* block (primary) */
13442         else if (lex_state == EXPR_ENDARG)
13443             c = tLBRACE_ARG;  /* block (expr) */
13444         else
13445             c = tLBRACE;      /* hash */
13446         COND_PUSH(0);
13447         CMDARG_PUSH(0);
13448         lex_state = EXPR_BEG;
13449         if (c != tLBRACE) command_start = TRUE;
13450         return c;
13451 
13452       case '\\':
13453         c = nextc();
13454         if (c == '\n') {
13455             space_seen = 1;
13456 #ifdef RIPPER
13457             ripper_dispatch_scan_event(parser, tSP);
13458 #endif
13459             goto retry; /* skip \\n */
13460         }
13461         pushback(c);
13462         return '\\';
13463 
13464       case '%':
13465         if (IS_BEG()) {
13466             int term;
13467             int paren;
13468 
13469             c = nextc();
13470           quotation:
13471             if (c == -1 || !ISALNUM(c)) {
13472                 term = c;
13473                 c = 'Q';
13474             }
13475             else {
13476                 term = nextc();
13477                 if (rb_enc_isalnum(term, parser->enc) || !parser_isascii()) {
13478                     yyerror("unknown type of %string");
13479                     return 0;
13480                 }
13481             }
13482             if (c == -1 || term == -1) {
13483                 compile_error(PARSER_ARG "unterminated quoted string meets end of file");
13484                 return 0;
13485             }
13486             paren = term;
13487             if (term == '(') term = ')';
13488             else if (term == '[') term = ']';
13489             else if (term == '{') term = '}';
13490             else if (term == '<') term = '>';
13491             else paren = 0;
13492 
13493             switch (c) {
13494               case 'Q':
13495                 lex_strterm = NEW_STRTERM(str_dquote, term, paren);
13496                 return tSTRING_BEG;
13497 
13498               case 'q':
13499                 lex_strterm = NEW_STRTERM(str_squote, term, paren);
13500                 return tSTRING_BEG;
13501 
13502               case 'W':
13503                 lex_strterm = NEW_STRTERM(str_dword, term, paren);
13504                 do {c = nextc();} while (ISSPACE(c));
13505                 pushback(c);
13506                 return tWORDS_BEG;
13507 
13508               case 'w':
13509                 lex_strterm = NEW_STRTERM(str_sword, term, paren);
13510                 do {c = nextc();} while (ISSPACE(c));
13511                 pushback(c);
13512                 return tQWORDS_BEG;
13513 
13514               case 'x':
13515                 lex_strterm = NEW_STRTERM(str_xquote, term, paren);
13516                 return tXSTRING_BEG;
13517 
13518               case 'r':
13519                 lex_strterm = NEW_STRTERM(str_regexp, term, paren);
13520                 return tREGEXP_BEG;
13521 
13522               case 's':
13523                 lex_strterm = NEW_STRTERM(str_ssym, term, paren);
13524                 lex_state = EXPR_FNAME;
13525                 return tSYMBEG;
13526 
13527               default:
13528                 yyerror("unknown type of %string");
13529                 return 0;
13530             }
13531         }
13532         if ((c = nextc()) == '=') {
13533             set_yylval_id('%');
13534             lex_state = EXPR_BEG;
13535             return tOP_ASGN;
13536         }
13537         if (IS_SPCARG(c)) {
13538             goto quotation;
13539         }
13540         switch (lex_state) {
13541           case EXPR_FNAME: case EXPR_DOT:
13542             lex_state = EXPR_ARG; break;
13543           default:
13544             lex_state = EXPR_BEG; break;
13545         }
13546         pushback(c);
13547         warn_balanced("%%", "string literal");
13548         return '%';
13549 
13550       case '$':
13551         lex_state = EXPR_END;
13552         newtok();
13553         c = nextc();
13554         switch (c) {
13555           case '_':             /* $_: last read line string */
13556             c = nextc();
13557             if (parser_is_identchar()) {
13558                 tokadd('$');
13559                 tokadd('_');
13560                 break;
13561             }
13562             pushback(c);
13563             c = '_';
13564             /* fall through */
13565           case '~':             /* $~: match-data */
13566           case '*':             /* $*: argv */
13567           case '$':             /* $$: pid */
13568           case '?':             /* $?: last status */
13569           case '!':             /* $!: error string */
13570           case '@':             /* $@: error position */
13571           case '/':             /* $/: input record separator */
13572           case '\\':            /* $\: output record separator */
13573           case ';':             /* $;: field separator */
13574           case ',':             /* $,: output field separator */
13575           case '.':             /* $.: last read line number */
13576           case '=':             /* $=: ignorecase */
13577           case ':':             /* $:: load path */
13578           case '<':             /* $<: reading filename */
13579           case '>':             /* $>: default output handle */
13580           case '\"':            /* $": already loaded files */
13581             tokadd('$');
13582             tokadd(c);
13583             tokfix();
13584             set_yylval_name(rb_intern(tok()));
13585             return tGVAR;
13586 
13587           case '-':
13588             tokadd('$');
13589             tokadd(c);
13590             c = nextc();
13591             if (parser_is_identchar()) {
13592                 if (tokadd_mbchar(c) == -1) return 0;
13593             }
13594             else {
13595                 pushback(c);
13596             }
13597           gvar:
13598             tokfix();
13599             set_yylval_name(rb_intern(tok()));
13600             return tGVAR;
13601 
13602           case '&':             /* $&: last match */
13603           case '`':             /* $`: string before last match */
13604           case '\'':            /* $': string after last match */
13605           case '+':             /* $+: string matches last paren. */
13606             if (last_state == EXPR_FNAME) {
13607                 tokadd('$');
13608                 tokadd(c);
13609                 goto gvar;
13610             }
13611             set_yylval_node(NEW_BACK_REF(c));
13612             return tBACK_REF;
13613 
13614           case '1': case '2': case '3':
13615           case '4': case '5': case '6':
13616           case '7': case '8': case '9':
13617             tokadd('$');
13618             do {
13619                 tokadd(c);
13620                 c = nextc();
13621             } while (c != -1 && ISDIGIT(c));
13622             pushback(c);
13623             if (last_state == EXPR_FNAME) goto gvar;
13624             tokfix();
13625             set_yylval_node(NEW_NTH_REF(atoi(tok()+1)));
13626             return tNTH_REF;
13627 
13628           default:
13629             if (!parser_is_identchar()) {
13630                 pushback(c);
13631                 return '$';
13632             }
13633           case '0':
13634             tokadd('$');
13635         }
13636         break;
13637 
13638       case '@':
13639         c = nextc();
13640         newtok();
13641         tokadd('@');
13642         if (c == '@') {
13643             tokadd('@');
13644             c = nextc();
13645         }
13646         if (c != -1 && ISDIGIT(c)) {
13647             if (tokidx == 1) {
13648                 compile_error(PARSER_ARG "`@%c' is not allowed as an instance variable name", c);
13649             }
13650             else {
13651                 compile_error(PARSER_ARG "`@@%c' is not allowed as a class variable name", c);
13652             }
13653             return 0;
13654         }
13655         if (!parser_is_identchar()) {
13656             pushback(c);
13657             return '@';
13658         }
13659         break;
13660 
13661       case '_':
13662         if (was_bol() && whole_match_p("__END__", 7, 0)) {
13663             ruby__end__seen = 1;
13664             parser->eofp = Qtrue;
13665 #ifndef RIPPER
13666             return -1;
13667 #else
13668             lex_goto_eol(parser);
13669             ripper_dispatch_scan_event(parser, k__END__);
13670             return 0;
13671 #endif
13672         }
13673         newtok();
13674         break;
13675 
13676       default:
13677         if (!parser_is_identchar()) {
13678             rb_compile_error(PARSER_ARG  "Invalid char `\\x%02X' in expression", c);
13679             goto retry;
13680         }
13681 
13682         newtok();
13683         break;
13684     }
13685 
13686     mb = ENC_CODERANGE_7BIT;
13687     do {
13688         if (!ISASCII(c)) mb = ENC_CODERANGE_UNKNOWN;
13689         if (tokadd_mbchar(c) == -1) return 0;
13690         c = nextc();
13691     } while (parser_is_identchar());
13692     switch (tok()[0]) {
13693       case '@': case '$':
13694         pushback(c);
13695         break;
13696       default:
13697         if ((c == '!' || c == '?') && !peek('=')) {
13698             tokadd(c);
13699         }
13700         else {
13701             pushback(c);
13702         }
13703     }
13704     tokfix();
13705 
13706     {
13707         int result = 0;
13708 
13709         last_state = lex_state;
13710         switch (tok()[0]) {
13711           case '$':
13712             lex_state = EXPR_END;
13713             result = tGVAR;
13714             break;
13715           case '@':
13716             lex_state = EXPR_END;
13717             if (tok()[1] == '@')
13718                 result = tCVAR;
13719             else
13720                 result = tIVAR;
13721             break;
13722 
13723           default:
13724             if (toklast() == '!' || toklast() == '?') {
13725                 result = tFID;
13726             }
13727             else {
13728                 if (lex_state == EXPR_FNAME) {
13729                     if ((c = nextc()) == '=' && !peek('~') && !peek('>') &&
13730                         (!peek('=') || (lex_p + 1 < lex_pend && lex_p[1] == '>'))) {
13731                         result = tIDENTIFIER;
13732                         tokadd(c);
13733                         tokfix();
13734                     }
13735                     else {
13736                         pushback(c);
13737                     }
13738                 }
13739                 if (result == 0 && ISUPPER(tok()[0])) {
13740                     result = tCONSTANT;
13741                 }
13742                 else {
13743                     result = tIDENTIFIER;
13744                 }
13745             }
13746 
13747             if ((lex_state == EXPR_BEG && !cmd_state) ||
13748                 IS_ARG()) {
13749                 if (peek(':') && !(lex_p + 1 < lex_pend && lex_p[1] == ':')) {
13750                     lex_state = EXPR_BEG;
13751                     nextc();
13752                     set_yylval_name(TOK_INTERN(!ENC_SINGLE(mb)));
13753                     return tLABEL;
13754                 }
13755             }
13756             if (mb == ENC_CODERANGE_7BIT && lex_state != EXPR_DOT) {
13757                 const struct kwtable *kw;
13758 
13759                 /* See if it is a reserved word.  */
13760                 kw = rb_reserved_word(tok(), toklen());
13761                 if (kw) {
13762                     enum lex_state_e state = lex_state;
13763                     lex_state = kw->state;
13764                     if (state == EXPR_FNAME) {
13765                         set_yylval_name(rb_intern(kw->name));
13766                         return kw->id[0];
13767                     }
13768                     if (kw->id[0] == keyword_do) {
13769                         command_start = TRUE;
13770                         if (lpar_beg && lpar_beg == paren_nest) {
13771                             lpar_beg = 0;
13772                             --paren_nest;
13773                             return keyword_do_LAMBDA;
13774                         }
13775                         if (COND_P()) return keyword_do_cond;
13776                         if (CMDARG_P() && state != EXPR_CMDARG)
13777                             return keyword_do_block;
13778                         if (state == EXPR_ENDARG || state == EXPR_BEG)
13779                             return keyword_do_block;
13780                         return keyword_do;
13781                     }
13782                     if (state == EXPR_BEG || state == EXPR_VALUE)
13783                         return kw->id[0];
13784                     else {
13785                         if (kw->id[0] != kw->id[1])
13786                             lex_state = EXPR_BEG;
13787                         return kw->id[1];
13788                     }
13789                 }
13790             }
13791 
13792             if (IS_BEG() ||
13793                 lex_state == EXPR_DOT ||
13794                 IS_ARG()) {
13795                 if (cmd_state) {
13796                     lex_state = EXPR_CMDARG;
13797                 }
13798                 else {
13799                     lex_state = EXPR_ARG;
13800                 }
13801             }
13802             else if (lex_state == EXPR_FNAME) {
13803                 lex_state = EXPR_ENDFN;
13804             }
13805             else {
13806                 lex_state = EXPR_END;
13807             }
13808         }
13809         {
13810             ID ident = TOK_INTERN(!ENC_SINGLE(mb));
13811 
13812             set_yylval_name(ident);
13813             if (last_state != EXPR_DOT && is_local_id(ident) && lvar_defined(ident)) {
13814                 lex_state = EXPR_END;
13815             }
13816         }
13817         return result;
13818     }
13819 }
13820 
13821 #if YYPURE
13822 static int
13823 yylex(void *lval, void *p)
13824 #else
13825 yylex(void *p)
13826 #endif
13827 {
13828     struct parser_params *parser = (struct parser_params*)p;
13829     int t;
13830 
13831 #if YYPURE
13832     parser->parser_yylval = lval;
13833     parser->parser_yylval->val = Qundef;
13834 #endif
13835     t = parser_yylex(parser);
13836 #ifdef RIPPER
13837     if (!NIL_P(parser->delayed)) {
13838         ripper_dispatch_delayed_token(parser, t);
13839     }
13840     if (t != 0)
13841         ripper_dispatch_scan_event(parser, t);
13842 #endif
13843 
13844     return t;
13845 }
13846 
13847 #ifndef RIPPER
13848 static NODE*
13849 node_newnode(struct parser_params *parser, enum node_type type, VALUE a0, VALUE a1, VALUE a2)
13850 {
13851     NODE *n = (rb_node_newnode)(type, a0, a1, a2);
13852     nd_set_line(n, ruby_sourceline);
13853     return n;
13854 }
13855 
13856 enum node_type
13857 nodetype(NODE *node)                    /* for debug */
13858 {
13859     return (enum node_type)nd_type(node);
13860 }
13861 
13862 int
13863 nodeline(NODE *node)
13864 {
13865     return nd_line(node);
13866 }
13867 
13868 static NODE*
13869 newline_node(NODE *node)
13870 {
13871     if (node) {
13872         node = remove_begin(node);
13873         node->flags |= NODE_FL_NEWLINE;
13874     }
13875     return node;
13876 }
13877 
13878 static void
13879 fixpos(NODE *node, NODE *orig)
13880 {
13881     if (!node) return;
13882     if (!orig) return;
13883     if (orig == (NODE*)1) return;
13884     nd_set_line(node, nd_line(orig));
13885 }
13886 
13887 static void
13888 parser_warning(struct parser_params *parser, NODE *node, const char *mesg)
13889 {
13890     rb_compile_warning(ruby_sourcefile, nd_line(node), "%s", mesg);
13891 }
13892 #define parser_warning(node, mesg) parser_warning(parser, node, mesg)
13893 
13894 static void
13895 parser_warn(struct parser_params *parser, NODE *node, const char *mesg)
13896 {
13897     rb_compile_warn(ruby_sourcefile, nd_line(node), "%s", mesg);
13898 }
13899 #define parser_warn(node, mesg) parser_warn(parser, node, mesg)
13900 
13901 static NODE*
13902 block_append_gen(struct parser_params *parser, NODE *head, NODE *tail)
13903 {
13904     NODE *end, *h = head, *nd;
13905 
13906     if (tail == 0) return head;
13907 
13908     if (h == 0) return tail;
13909     switch (nd_type(h)) {
13910       case NODE_LIT:
13911       case NODE_STR:
13912       case NODE_SELF:
13913       case NODE_TRUE:
13914       case NODE_FALSE:
13915       case NODE_NIL:
13916         parser_warning(h, "unused literal ignored");
13917         return tail;
13918       default:
13919         h = end = NEW_BLOCK(head);
13920         end->nd_end = end;
13921         fixpos(end, head);
13922         head = end;
13923         break;
13924       case NODE_BLOCK:
13925         end = h->nd_end;
13926         break;
13927     }
13928 
13929     nd = end->nd_head;
13930     switch (nd_type(nd)) {
13931       case NODE_RETURN:
13932       case NODE_BREAK:
13933       case NODE_NEXT:
13934       case NODE_REDO:
13935       case NODE_RETRY:
13936         if (RTEST(ruby_verbose)) {
13937             parser_warning(nd, "statement not reached");
13938         }
13939         break;
13940 
13941       default:
13942         break;
13943     }
13944 
13945     if (nd_type(tail) != NODE_BLOCK) {
13946         tail = NEW_BLOCK(tail);
13947         tail->nd_end = tail;
13948     }
13949     end->nd_next = tail;
13950     h->nd_end = tail->nd_end;
13951     return head;
13952 }
13953 
13954 /* append item to the list */
13955 static NODE*
13956 list_append_gen(struct parser_params *parser, NODE *list, NODE *item)
13957 {
13958     NODE *last;
13959 
13960     if (list == 0) return NEW_LIST(item);
13961     if (list->nd_next) {
13962         last = list->nd_next->nd_end;
13963     }
13964     else {
13965         last = list;
13966     }
13967 
13968     list->nd_alen += 1;
13969     last->nd_next = NEW_LIST(item);
13970     list->nd_next->nd_end = last->nd_next;
13971     return list;
13972 }
13973 
13974 /* concat two lists */
13975 static NODE*
13976 list_concat_gen(struct parser_params *parser, NODE *head, NODE *tail)
13977 {
13978     NODE *last;
13979 
13980     if (head->nd_next) {
13981         last = head->nd_next->nd_end;
13982     }
13983     else {
13984         last = head;
13985     }
13986 
13987     head->nd_alen += tail->nd_alen;
13988     last->nd_next = tail;
13989     if (tail->nd_next) {
13990         head->nd_next->nd_end = tail->nd_next->nd_end;
13991     }
13992     else {
13993         head->nd_next->nd_end = tail;
13994     }
13995 
13996     return head;
13997 }
13998 
13999 static int
14000 literal_concat0(struct parser_params *parser, VALUE head, VALUE tail)
14001 {
14002     if (NIL_P(tail)) return 1;
14003     if (!rb_enc_compatible(head, tail)) {
14004         compile_error(PARSER_ARG "string literal encodings differ (%s / %s)",
14005                       rb_enc_name(rb_enc_get(head)),
14006                       rb_enc_name(rb_enc_get(tail)));
14007         rb_str_resize(head, 0);
14008         rb_str_resize(tail, 0);
14009         return 0;
14010     }
14011     rb_str_buf_append(head, tail);
14012     return 1;
14013 }
14014 
14015 /* concat two string literals */
14016 static NODE *
14017 literal_concat_gen(struct parser_params *parser, NODE *head, NODE *tail)
14018 {
14019     enum node_type htype;
14020 
14021     if (!head) return tail;
14022     if (!tail) return head;
14023 
14024     htype = nd_type(head);
14025     if (htype == NODE_EVSTR) {
14026         NODE *node = NEW_DSTR(Qnil);
14027         head = list_append(node, head);
14028     }
14029     switch (nd_type(tail)) {
14030       case NODE_STR:
14031         if (htype == NODE_STR) {
14032             if (!literal_concat0(parser, head->nd_lit, tail->nd_lit)) {
14033               error:
14034                 rb_gc_force_recycle((VALUE)head);
14035                 rb_gc_force_recycle((VALUE)tail);
14036                 return 0;
14037             }
14038             rb_gc_force_recycle((VALUE)tail);
14039         }
14040         else {
14041             list_append(head, tail);
14042         }
14043         break;
14044 
14045       case NODE_DSTR:
14046         if (htype == NODE_STR) {
14047             if (!literal_concat0(parser, head->nd_lit, tail->nd_lit))
14048                 goto error;
14049             tail->nd_lit = head->nd_lit;
14050             rb_gc_force_recycle((VALUE)head);
14051             head = tail;
14052         }
14053         else if (NIL_P(tail->nd_lit)) {
14054             head->nd_alen += tail->nd_alen - 1;
14055             head->nd_next->nd_end->nd_next = tail->nd_next;
14056             head->nd_next->nd_end = tail->nd_next->nd_end;
14057             rb_gc_force_recycle((VALUE)tail);
14058         }
14059         else {
14060             nd_set_type(tail, NODE_ARRAY);
14061             tail->nd_head = NEW_STR(tail->nd_lit);
14062             list_concat(head, tail);
14063         }
14064         break;
14065 
14066       case NODE_EVSTR:
14067         if (htype == NODE_STR) {
14068             nd_set_type(head, NODE_DSTR);
14069             head->nd_alen = 1;
14070         }
14071         list_append(head, tail);
14072         break;
14073     }
14074     return head;
14075 }
14076 
14077 static NODE *
14078 evstr2dstr_gen(struct parser_params *parser, NODE *node)
14079 {
14080     if (nd_type(node) == NODE_EVSTR) {
14081         node = list_append(NEW_DSTR(Qnil), node);
14082     }
14083     return node;
14084 }
14085 
14086 static NODE *
14087 new_evstr_gen(struct parser_params *parser, NODE *node)
14088 {
14089     NODE *head = node;
14090 
14091     if (node) {
14092         switch (nd_type(node)) {
14093           case NODE_STR: case NODE_DSTR: case NODE_EVSTR:
14094             return node;
14095         }
14096     }
14097     return NEW_EVSTR(head);
14098 }
14099 
14100 static NODE *
14101 call_bin_op_gen(struct parser_params *parser, NODE *recv, ID id, NODE *arg1)
14102 {
14103     value_expr(recv);
14104     value_expr(arg1);
14105     return NEW_CALL(recv, id, NEW_LIST(arg1));
14106 }
14107 
14108 static NODE *
14109 call_uni_op_gen(struct parser_params *parser, NODE *recv, ID id)
14110 {
14111     value_expr(recv);
14112     return NEW_CALL(recv, id, 0);
14113 }
14114 
14115 static NODE*
14116 match_op_gen(struct parser_params *parser, NODE *node1, NODE *node2)
14117 {
14118     value_expr(node1);
14119     value_expr(node2);
14120     if (node1) {
14121         switch (nd_type(node1)) {
14122           case NODE_DREGX:
14123           case NODE_DREGX_ONCE:
14124             return NEW_MATCH2(node1, node2);
14125 
14126           case NODE_LIT:
14127             if (TYPE(node1->nd_lit) == T_REGEXP) {
14128                 return NEW_MATCH2(node1, node2);
14129             }
14130         }
14131     }
14132 
14133     if (node2) {
14134         switch (nd_type(node2)) {
14135           case NODE_DREGX:
14136           case NODE_DREGX_ONCE:
14137             return NEW_MATCH3(node2, node1);
14138 
14139           case NODE_LIT:
14140             if (TYPE(node2->nd_lit) == T_REGEXP) {
14141                 return NEW_MATCH3(node2, node1);
14142             }
14143         }
14144     }
14145 
14146     return NEW_CALL(node1, tMATCH, NEW_LIST(node2));
14147 }
14148 
14149 static NODE*
14150 gettable_gen(struct parser_params *parser, ID id)
14151 {
14152     if (id == keyword_self) {
14153         return NEW_SELF();
14154     }
14155     else if (id == keyword_nil) {
14156         return NEW_NIL();
14157     }
14158     else if (id == keyword_true) {
14159         return NEW_TRUE();
14160     }
14161     else if (id == keyword_false) {
14162         return NEW_FALSE();
14163     }
14164     else if (id == keyword__FILE__) {
14165         return NEW_STR(rb_external_str_new_with_enc(ruby_sourcefile, strlen(ruby_sourcefile),
14166                                                     rb_filesystem_encoding()));
14167     }
14168     else if (id == keyword__LINE__) {
14169         return NEW_LIT(INT2FIX(ruby_sourceline));
14170     }
14171     else if (id == keyword__ENCODING__) {
14172         return NEW_LIT(rb_enc_from_encoding(parser->enc));
14173     }
14174     else if (is_local_id(id)) {
14175         if (dyna_in_block() && dvar_defined(id)) return NEW_DVAR(id);
14176         if (local_id(id)) return NEW_LVAR(id);
14177         /* method call without arguments */
14178         return NEW_VCALL(id);
14179     }
14180     else if (is_global_id(id)) {
14181         return NEW_GVAR(id);
14182     }
14183     else if (is_instance_id(id)) {
14184         return NEW_IVAR(id);
14185     }
14186     else if (is_const_id(id)) {
14187         return NEW_CONST(id);
14188     }
14189     else if (is_class_id(id)) {
14190         return NEW_CVAR(id);
14191     }
14192     compile_error(PARSER_ARG "identifier %s is not valid to get", rb_id2name(id));
14193     return 0;
14194 }
14195 #endif /* !RIPPER */
14196 
14197 #ifdef RIPPER
14198 static VALUE
14199 assignable_gen(struct parser_params *parser, VALUE lhs)
14200 #else
14201 static NODE*
14202 assignable_gen(struct parser_params *parser, ID id, NODE *val)
14203 #endif
14204 {
14205 #ifdef RIPPER
14206     ID id = get_id(lhs);
14207 # define assignable_result(x) get_value(lhs)
14208 # define parser_yyerror(parser, x) dispatch1(assign_error, lhs)
14209 #else
14210 # define assignable_result(x) x
14211 #endif
14212     if (!id) return assignable_result(0);
14213     if (id == keyword_self) {
14214         yyerror("Can't change the value of self");
14215     }
14216     else if (id == keyword_nil) {
14217         yyerror("Can't assign to nil");
14218     }
14219     else if (id == keyword_true) {
14220         yyerror("Can't assign to true");
14221     }
14222     else if (id == keyword_false) {
14223         yyerror("Can't assign to false");
14224     }
14225     else if (id == keyword__FILE__) {
14226         yyerror("Can't assign to __FILE__");
14227     }
14228     else if (id == keyword__LINE__) {
14229         yyerror("Can't assign to __LINE__");
14230     }
14231     else if (id == keyword__ENCODING__) {
14232         yyerror("Can't assign to __ENCODING__");
14233     }
14234     else if (is_local_id(id)) {
14235         if (dyna_in_block()) {
14236             if (dvar_curr(id)) {
14237                 return assignable_result(NEW_DASGN_CURR(id, val));
14238             }
14239             else if (dvar_defined(id)) {
14240                 return assignable_result(NEW_DASGN(id, val));
14241             }
14242             else if (local_id(id)) {
14243                 return assignable_result(NEW_LASGN(id, val));
14244             }
14245             else {
14246                 dyna_var(id);
14247                 return assignable_result(NEW_DASGN_CURR(id, val));
14248             }
14249         }
14250         else {
14251             if (!local_id(id)) {
14252                 local_var(id);
14253             }
14254             return assignable_result(NEW_LASGN(id, val));
14255         }
14256     }
14257     else if (is_global_id(id)) {
14258         return assignable_result(NEW_GASGN(id, val));
14259     }
14260     else if (is_instance_id(id)) {
14261         return assignable_result(NEW_IASGN(id, val));
14262     }
14263     else if (is_const_id(id)) {
14264         if (!in_def && !in_single)
14265             return assignable_result(NEW_CDECL(id, val, 0));
14266         yyerror("dynamic constant assignment");
14267     }
14268     else if (is_class_id(id)) {
14269         return assignable_result(NEW_CVASGN(id, val));
14270     }
14271     else {
14272         compile_error(PARSER_ARG "identifier %s is not valid to set", rb_id2name(id));
14273     }
14274     return assignable_result(0);
14275 #undef assignable_result
14276 #undef parser_yyerror
14277 }
14278 
14279 static ID
14280 shadowing_lvar_gen(struct parser_params *parser, ID name)
14281 {
14282     ID uscore;
14283 
14284     CONST_ID(uscore, "_");
14285     if (uscore == name) return name;
14286     if (dyna_in_block()) {
14287         if (dvar_curr(name)) {
14288             yyerror("duplicated argument name");
14289         }
14290         else if (dvar_defined(name) || local_id(name)) {
14291             rb_warningS("shadowing outer local variable - %s", rb_id2name(name));
14292             vtable_add(lvtbl->vars, name);
14293         }
14294     }
14295     else {
14296         if (local_id(name)) {
14297             yyerror("duplicated argument name");
14298         }
14299     }
14300     return name;
14301 }
14302 
14303 static void
14304 new_bv_gen(struct parser_params *parser, ID name)
14305 {
14306     if (!name) return;
14307     if (!is_local_id(name)) {
14308         compile_error(PARSER_ARG "invalid local variable - %s",
14309                       rb_id2name(name));
14310         return;
14311     }
14312     shadowing_lvar(name);
14313     dyna_var(name);
14314 }
14315 
14316 #ifndef RIPPER
14317 static NODE *
14318 aryset_gen(struct parser_params *parser, NODE *recv, NODE *idx)
14319 {
14320     if (recv && nd_type(recv) == NODE_SELF)
14321         recv = (NODE *)1;
14322     return NEW_ATTRASGN(recv, tASET, idx);
14323 }
14324 
14325 static void
14326 block_dup_check_gen(struct parser_params *parser, NODE *node1, NODE *node2)
14327 {
14328     if (node2 && node1 && nd_type(node1) == NODE_BLOCK_PASS) {
14329         compile_error(PARSER_ARG "both block arg and actual block given");
14330     }
14331 }
14332 
14333 ID
14334 rb_id_attrset(ID id)
14335 {
14336     id &= ~ID_SCOPE_MASK;
14337     id |= ID_ATTRSET;
14338     return id;
14339 }
14340 
14341 static NODE *
14342 attrset_gen(struct parser_params *parser, NODE *recv, ID id)
14343 {
14344     if (recv && nd_type(recv) == NODE_SELF)
14345         recv = (NODE *)1;
14346     return NEW_ATTRASGN(recv, rb_id_attrset(id), 0);
14347 }
14348 
14349 static void
14350 rb_backref_error_gen(struct parser_params *parser, NODE *node)
14351 {
14352     switch (nd_type(node)) {
14353       case NODE_NTH_REF:
14354         compile_error(PARSER_ARG "Can't set variable $%ld", node->nd_nth);
14355         break;
14356       case NODE_BACK_REF:
14357         compile_error(PARSER_ARG "Can't set variable $%c", (int)node->nd_nth);
14358         break;
14359     }
14360 }
14361 
14362 static NODE *
14363 arg_concat_gen(struct parser_params *parser, NODE *node1, NODE *node2)
14364 {
14365     if (!node2) return node1;
14366     switch (nd_type(node1)) {
14367       case NODE_BLOCK_PASS:
14368         if (node1->nd_head)
14369             node1->nd_head = arg_concat(node1->nd_head, node2);
14370         else
14371             node1->nd_head = NEW_LIST(node2);
14372         return node1;
14373       case NODE_ARGSPUSH:
14374         if (nd_type(node2) != NODE_ARRAY) break;
14375         node1->nd_body = list_concat(NEW_LIST(node1->nd_body), node2);
14376         nd_set_type(node1, NODE_ARGSCAT);
14377         return node1;
14378       case NODE_ARGSCAT:
14379         if (nd_type(node2) != NODE_ARRAY ||
14380             nd_type(node1->nd_body) != NODE_ARRAY) break;
14381         node1->nd_body = list_concat(node1->nd_body, node2);
14382         return node1;
14383     }
14384     return NEW_ARGSCAT(node1, node2);
14385 }
14386 
14387 static NODE *
14388 arg_append_gen(struct parser_params *parser, NODE *node1, NODE *node2)
14389 {
14390     if (!node1) return NEW_LIST(node2);
14391     switch (nd_type(node1))  {
14392       case NODE_ARRAY:
14393         return list_append(node1, node2);
14394       case NODE_BLOCK_PASS:
14395         node1->nd_head = arg_append(node1->nd_head, node2);
14396         return node1;
14397       case NODE_ARGSPUSH:
14398         node1->nd_body = list_append(NEW_LIST(node1->nd_body), node2);
14399         nd_set_type(node1, NODE_ARGSCAT);
14400         return node1;
14401     }
14402     return NEW_ARGSPUSH(node1, node2);
14403 }
14404 
14405 static NODE *
14406 splat_array(NODE* node)
14407 {
14408     if (nd_type(node) == NODE_SPLAT) node = node->nd_head;
14409     if (nd_type(node) == NODE_ARRAY) return node;
14410     return 0;
14411 }
14412 
14413 static NODE *
14414 node_assign_gen(struct parser_params *parser, NODE *lhs, NODE *rhs)
14415 {
14416     if (!lhs) return 0;
14417 
14418     switch (nd_type(lhs)) {
14419       case NODE_GASGN:
14420       case NODE_IASGN:
14421       case NODE_IASGN2:
14422       case NODE_LASGN:
14423       case NODE_DASGN:
14424       case NODE_DASGN_CURR:
14425       case NODE_MASGN:
14426       case NODE_CDECL:
14427       case NODE_CVASGN:
14428         lhs->nd_value = rhs;
14429         break;
14430 
14431       case NODE_ATTRASGN:
14432       case NODE_CALL:
14433         lhs->nd_args = arg_append(lhs->nd_args, rhs);
14434         break;
14435 
14436       default:
14437         /* should not happen */
14438         break;
14439     }
14440 
14441     return lhs;
14442 }
14443 
14444 static int
14445 value_expr_gen(struct parser_params *parser, NODE *node)
14446 {
14447     int cond = 0;
14448 
14449     if (!node) {
14450         rb_warning0("empty expression");
14451     }
14452     while (node) {
14453         switch (nd_type(node)) {
14454           case NODE_DEFN:
14455           case NODE_DEFS:
14456             parser_warning(node, "void value expression");
14457             return FALSE;
14458 
14459           case NODE_RETURN:
14460           case NODE_BREAK:
14461           case NODE_NEXT:
14462           case NODE_REDO:
14463           case NODE_RETRY:
14464             if (!cond) yyerror("void value expression");
14465             /* or "control never reach"? */
14466             return FALSE;
14467 
14468           case NODE_BLOCK:
14469             while (node->nd_next) {
14470                 node = node->nd_next;
14471             }
14472             node = node->nd_head;
14473             break;
14474 
14475           case NODE_BEGIN:
14476             node = node->nd_body;
14477             break;
14478 
14479           case NODE_IF:
14480             if (!node->nd_body) {
14481                 node = node->nd_else;
14482                 break;
14483             }
14484             else if (!node->nd_else) {
14485                 node = node->nd_body;
14486                 break;
14487             }
14488             if (!value_expr(node->nd_body)) return FALSE;
14489             node = node->nd_else;
14490             break;
14491 
14492           case NODE_AND:
14493           case NODE_OR:
14494             cond = 1;
14495             node = node->nd_2nd;
14496             break;
14497 
14498           default:
14499             return TRUE;
14500         }
14501     }
14502 
14503     return TRUE;
14504 }
14505 
14506 static void
14507 void_expr_gen(struct parser_params *parser, NODE *node)
14508 {
14509     const char *useless = 0;
14510 
14511     if (!RTEST(ruby_verbose)) return;
14512 
14513     if (!node) return;
14514     switch (nd_type(node)) {
14515       case NODE_CALL:
14516         switch (node->nd_mid) {
14517           case '+':
14518           case '-':
14519           case '*':
14520           case '/':
14521           case '%':
14522           case tPOW:
14523           case tUPLUS:
14524           case tUMINUS:
14525           case '|':
14526           case '^':
14527           case '&':
14528           case tCMP:
14529           case '>':
14530           case tGEQ:
14531           case '<':
14532           case tLEQ:
14533           case tEQ:
14534           case tNEQ:
14535             useless = rb_id2name(node->nd_mid);
14536             break;
14537         }
14538         break;
14539 
14540       case NODE_LVAR:
14541       case NODE_DVAR:
14542       case NODE_GVAR:
14543       case NODE_IVAR:
14544       case NODE_CVAR:
14545       case NODE_NTH_REF:
14546       case NODE_BACK_REF:
14547         useless = "a variable";
14548         break;
14549       case NODE_CONST:
14550         useless = "a constant";
14551         break;
14552       case NODE_LIT:
14553       case NODE_STR:
14554       case NODE_DSTR:
14555       case NODE_DREGX:
14556       case NODE_DREGX_ONCE:
14557         useless = "a literal";
14558         break;
14559       case NODE_COLON2:
14560       case NODE_COLON3:
14561         useless = "::";
14562         break;
14563       case NODE_DOT2:
14564         useless = "..";
14565         break;
14566       case NODE_DOT3:
14567         useless = "...";
14568         break;
14569       case NODE_SELF:
14570         useless = "self";
14571         break;
14572       case NODE_NIL:
14573         useless = "nil";
14574         break;
14575       case NODE_TRUE:
14576         useless = "true";
14577         break;
14578       case NODE_FALSE:
14579         useless = "false";
14580         break;
14581       case NODE_DEFINED:
14582         useless = "defined?";
14583         break;
14584     }
14585 
14586     if (useless) {
14587         int line = ruby_sourceline;
14588 
14589         ruby_sourceline = nd_line(node);
14590         rb_warnS("useless use of %s in void context", useless);
14591         ruby_sourceline = line;
14592     }
14593 }
14594 
14595 static void
14596 void_stmts_gen(struct parser_params *parser, NODE *node)
14597 {
14598     if (!RTEST(ruby_verbose)) return;
14599     if (!node) return;
14600     if (nd_type(node) != NODE_BLOCK) return;
14601 
14602     for (;;) {
14603         if (!node->nd_next) return;
14604         void_expr0(node->nd_head);
14605         node = node->nd_next;
14606     }
14607 }
14608 
14609 static NODE *
14610 remove_begin(NODE *node)
14611 {
14612     NODE **n = &node, *n1 = node;
14613     while (n1 && nd_type(n1) == NODE_BEGIN && n1->nd_body) {
14614         *n = n1 = n1->nd_body;
14615     }
14616     return node;
14617 }
14618 
14619 static void
14620 reduce_nodes_gen(struct parser_params *parser, NODE **body)
14621 {
14622     NODE *node = *body;
14623 
14624     if (!node) {
14625         *body = NEW_NIL();
14626         return;
14627     }
14628 #define subnodes(n1, n2) \
14629     ((!node->n1) ? (node->n2 ? (body = &node->n2, 1) : 0) : \
14630      (!node->n2) ? (body = &node->n1, 1) : \
14631      (reduce_nodes(&node->n1), body = &node->n2, 1))
14632 
14633     while (node) {
14634         int newline = (int)(node->flags & NODE_FL_NEWLINE);
14635         switch (nd_type(node)) {
14636           end:
14637           case NODE_NIL:
14638             *body = 0;
14639             return;
14640           case NODE_RETURN:
14641             *body = node = node->nd_stts;
14642             if (newline && node) node->flags |= NODE_FL_NEWLINE;
14643             continue;
14644           case NODE_BEGIN:
14645             *body = node = node->nd_body;
14646             if (newline && node) node->flags |= NODE_FL_NEWLINE;
14647             continue;
14648           case NODE_BLOCK:
14649             body = &node->nd_end->nd_head;
14650             break;
14651           case NODE_IF:
14652             if (subnodes(nd_body, nd_else)) break;
14653             return;
14654           case NODE_CASE:
14655             body = &node->nd_body;
14656             break;
14657           case NODE_WHEN:
14658             if (!subnodes(nd_body, nd_next)) goto end;
14659             break;
14660           case NODE_ENSURE:
14661             if (!subnodes(nd_head, nd_resq)) goto end;
14662             break;
14663           case NODE_RESCUE:
14664             if (!subnodes(nd_head, nd_resq)) goto end;
14665             break;
14666           default:
14667             return;
14668         }
14669         node = *body;
14670         if (newline && node) node->flags |= NODE_FL_NEWLINE;
14671     }
14672 
14673 #undef subnodes
14674 }
14675 
14676 static int
14677 assign_in_cond(struct parser_params *parser, NODE *node)
14678 {
14679     switch (nd_type(node)) {
14680       case NODE_MASGN:
14681         yyerror("multiple assignment in conditional");
14682         return 1;
14683 
14684       case NODE_LASGN:
14685       case NODE_DASGN:
14686       case NODE_DASGN_CURR:
14687       case NODE_GASGN:
14688       case NODE_IASGN:
14689         break;
14690 
14691       default:
14692         return 0;
14693     }
14694 
14695     switch (nd_type(node->nd_value)) {
14696       case NODE_LIT:
14697       case NODE_STR:
14698       case NODE_NIL:
14699       case NODE_TRUE:
14700       case NODE_FALSE:
14701         /* reports always */
14702         parser_warn(node->nd_value, "found = in conditional, should be ==");
14703         return 1;
14704 
14705       case NODE_DSTR:
14706       case NODE_XSTR:
14707       case NODE_DXSTR:
14708       case NODE_EVSTR:
14709       case NODE_DREGX:
14710       default:
14711         break;
14712     }
14713     return 1;
14714 }
14715 
14716 static void
14717 warn_unless_e_option(struct parser_params *parser, NODE *node, const char *str)
14718 {
14719     if (!e_option_supplied(parser)) parser_warn(node, str);
14720 }
14721 
14722 static void
14723 warning_unless_e_option(struct parser_params *parser, NODE *node, const char *str)
14724 {
14725     if (!e_option_supplied(parser)) parser_warning(node, str);
14726 }
14727 
14728 static void
14729 fixup_nodes(NODE **rootnode)
14730 {
14731     NODE *node, *next, *head;
14732 
14733     for (node = *rootnode; node; node = next) {
14734         enum node_type type;
14735         VALUE val;
14736 
14737         next = node->nd_next;
14738         head = node->nd_head;
14739         rb_gc_force_recycle((VALUE)node);
14740         *rootnode = next;
14741         switch (type = nd_type(head)) {
14742           case NODE_DOT2:
14743           case NODE_DOT3:
14744             val = rb_range_new(head->nd_beg->nd_lit, head->nd_end->nd_lit,
14745                                type == NODE_DOT3);
14746             rb_gc_force_recycle((VALUE)head->nd_beg);
14747             rb_gc_force_recycle((VALUE)head->nd_end);
14748             nd_set_type(head, NODE_LIT);
14749             head->nd_lit = val;
14750             break;
14751           default:
14752             break;
14753         }
14754     }
14755 }
14756 
14757 static NODE *cond0(struct parser_params*,NODE*);
14758 
14759 static NODE*
14760 range_op(struct parser_params *parser, NODE *node)
14761 {
14762     enum node_type type;
14763 
14764     if (node == 0) return 0;
14765 
14766     type = nd_type(node);
14767     value_expr(node);
14768     if (type == NODE_LIT && FIXNUM_P(node->nd_lit)) {
14769         warn_unless_e_option(parser, node, "integer literal in conditional range");
14770         return NEW_CALL(node, tEQ, NEW_LIST(NEW_GVAR(rb_intern("$."))));
14771     }
14772     return cond0(parser, node);
14773 }
14774 
14775 static int
14776 literal_node(NODE *node)
14777 {
14778     if (!node) return 1;        /* same as NODE_NIL */
14779     switch (nd_type(node)) {
14780       case NODE_LIT:
14781       case NODE_STR:
14782       case NODE_DSTR:
14783       case NODE_EVSTR:
14784       case NODE_DREGX:
14785       case NODE_DREGX_ONCE:
14786       case NODE_DSYM:
14787         return 2;
14788       case NODE_TRUE:
14789       case NODE_FALSE:
14790       case NODE_NIL:
14791         return 1;
14792     }
14793     return 0;
14794 }
14795 
14796 static NODE*
14797 cond0(struct parser_params *parser, NODE *node)
14798 {
14799     if (node == 0) return 0;
14800     assign_in_cond(parser, node);
14801 
14802     switch (nd_type(node)) {
14803       case NODE_DSTR:
14804       case NODE_EVSTR:
14805       case NODE_STR:
14806         rb_warn0("string literal in condition");
14807         break;
14808 
14809       case NODE_DREGX:
14810       case NODE_DREGX_ONCE:
14811         warning_unless_e_option(parser, node, "regex literal in condition");
14812         return NEW_MATCH2(node, NEW_GVAR(rb_intern("$_")));
14813 
14814       case NODE_AND:
14815       case NODE_OR:
14816         node->nd_1st = cond0(parser, node->nd_1st);
14817         node->nd_2nd = cond0(parser, node->nd_2nd);
14818         break;
14819 
14820       case NODE_DOT2:
14821       case NODE_DOT3:
14822         node->nd_beg = range_op(parser, node->nd_beg);
14823         node->nd_end = range_op(parser, node->nd_end);
14824         if (nd_type(node) == NODE_DOT2) nd_set_type(node,NODE_FLIP2);
14825         else if (nd_type(node) == NODE_DOT3) nd_set_type(node, NODE_FLIP3);
14826         if (!e_option_supplied(parser)) {
14827             int b = literal_node(node->nd_beg);
14828             int e = literal_node(node->nd_end);
14829             if ((b == 1 && e == 1) || (b + e >= 2 && RTEST(ruby_verbose))) {
14830                 parser_warn(node, "range literal in condition");
14831             }
14832         }
14833         break;
14834 
14835       case NODE_DSYM:
14836         parser_warning(node, "literal in condition");
14837         break;
14838 
14839       case NODE_LIT:
14840         if (TYPE(node->nd_lit) == T_REGEXP) {
14841             warn_unless_e_option(parser, node, "regex literal in condition");
14842             nd_set_type(node, NODE_MATCH);
14843         }
14844         else {
14845             parser_warning(node, "literal in condition");
14846         }
14847       default:
14848         break;
14849     }
14850     return node;
14851 }
14852 
14853 static NODE*
14854 cond_gen(struct parser_params *parser, NODE *node)
14855 {
14856     if (node == 0) return 0;
14857     return cond0(parser, node);
14858 }
14859 
14860 static NODE*
14861 logop_gen(struct parser_params *parser, enum node_type type, NODE *left, NODE *right)
14862 {
14863     value_expr(left);
14864     if (left && (enum node_type)nd_type(left) == type) {
14865         NODE *node = left, *second;
14866         while ((second = node->nd_2nd) != 0 && (enum node_type)nd_type(second) == type) {
14867             node = second;
14868         }
14869         node->nd_2nd = NEW_NODE(type, second, right, 0);
14870         return left;
14871     }
14872     return NEW_NODE(type, left, right, 0);
14873 }
14874 
14875 static void
14876 no_blockarg(struct parser_params *parser, NODE *node)
14877 {
14878     if (node && nd_type(node) == NODE_BLOCK_PASS) {
14879         compile_error(PARSER_ARG "block argument should not be given");
14880     }
14881 }
14882 
14883 static NODE *
14884 ret_args_gen(struct parser_params *parser, NODE *node)
14885 {
14886     if (node) {
14887         no_blockarg(parser, node);
14888         if (nd_type(node) == NODE_ARRAY) {
14889             if (node->nd_next == 0) {
14890                 node = node->nd_head;
14891             }
14892             else {
14893                 nd_set_type(node, NODE_VALUES);
14894             }
14895         }
14896     }
14897     return node;
14898 }
14899 
14900 static NODE *
14901 new_yield_gen(struct parser_params *parser, NODE *node)
14902 {
14903     long state = Qtrue;
14904 
14905     if (node) {
14906         no_blockarg(parser, node);
14907         if (node && nd_type(node) == NODE_SPLAT) {
14908             state = Qtrue;
14909         }
14910     }
14911     else {
14912         state = Qfalse;
14913     }
14914     return NEW_YIELD(node, state);
14915 }
14916 
14917 static NODE*
14918 negate_lit(NODE *node)
14919 {
14920     switch (TYPE(node->nd_lit)) {
14921       case T_FIXNUM:
14922         node->nd_lit = LONG2FIX(-FIX2LONG(node->nd_lit));
14923         break;
14924       case T_BIGNUM:
14925         node->nd_lit = rb_funcall(node->nd_lit,tUMINUS,0,0);
14926         break;
14927       case T_FLOAT:
14928         RFLOAT(node->nd_lit)->float_value = -RFLOAT_VALUE(node->nd_lit);
14929         break;
14930       default:
14931         break;
14932     }
14933     return node;
14934 }
14935 
14936 static NODE *
14937 arg_blk_pass(NODE *node1, NODE *node2)
14938 {
14939     if (node2) {
14940         node2->nd_head = node1;
14941         return node2;
14942     }
14943     return node1;
14944 }
14945 
14946 static NODE*
14947 new_args_gen(struct parser_params *parser, NODE *m, NODE *o, ID r, NODE *p, ID b)
14948 {
14949     int saved_line = ruby_sourceline;
14950     NODE *node;
14951     NODE *i1, *i2 = 0;
14952 
14953     node = NEW_ARGS(m ? m->nd_plen : 0, o);
14954     i1 = m ? m->nd_next : 0;
14955     node->nd_next = NEW_ARGS_AUX(r, b);
14956 
14957     if (p) {
14958         i2 = p->nd_next;
14959         node->nd_next->nd_next = NEW_ARGS_AUX(p->nd_pid, p->nd_plen);
14960     }
14961     else if (i1) {
14962         node->nd_next->nd_next = NEW_ARGS_AUX(0, 0);
14963     }
14964     if (i1 || i2) {
14965         node->nd_next->nd_next->nd_next = NEW_NODE(NODE_AND, i1, i2, 0);
14966     }
14967     ruby_sourceline = saved_line;
14968     return node;
14969 }
14970 #endif /* !RIPPER */
14971 
14972 static void
14973 local_push_gen(struct parser_params *parser, int inherit_dvars)
14974 {
14975     struct local_vars *local;
14976 
14977     local = ALLOC(struct local_vars);
14978     local->prev = lvtbl;
14979     local->args = vtable_alloc(0);
14980     local->vars = vtable_alloc(inherit_dvars ? DVARS_INHERIT : DVARS_TOPSCOPE);
14981     lvtbl = local;
14982 }
14983 
14984 static void
14985 local_pop_gen(struct parser_params *parser)
14986 {
14987     struct local_vars *local = lvtbl->prev;
14988     vtable_free(lvtbl->args);
14989     vtable_free(lvtbl->vars);
14990     xfree(lvtbl);
14991     lvtbl = local;
14992 }
14993 
14994 #ifndef RIPPER
14995 static ID*
14996 vtable_tblcpy(ID *buf, const struct vtable *src)
14997 {
14998     int i, cnt = vtable_size(src);
14999 
15000     if (cnt > 0) {
15001         buf[0] = cnt;
15002         for (i = 0; i < cnt; i++) {
15003             buf[i] = src->tbl[i];
15004         }
15005         return buf;
15006     }
15007     return 0;
15008 }
15009 
15010 static ID*
15011 local_tbl_gen(struct parser_params *parser)
15012 {
15013     int cnt = vtable_size(lvtbl->args) + vtable_size(lvtbl->vars);
15014     ID *buf;
15015 
15016     if (cnt <= 0) return 0;
15017     buf = ALLOC_N(ID, cnt + 1);
15018     vtable_tblcpy(buf+1, lvtbl->args);
15019     vtable_tblcpy(buf+vtable_size(lvtbl->args)+1, lvtbl->vars);
15020     buf[0] = cnt;
15021     return buf;
15022 }
15023 #endif
15024 
15025 static int
15026 arg_var_gen(struct parser_params *parser, ID id)
15027 {
15028     vtable_add(lvtbl->args, id);
15029     return vtable_size(lvtbl->args) - 1;
15030 }
15031 
15032 static int
15033 local_var_gen(struct parser_params *parser, ID id)
15034 {
15035     vtable_add(lvtbl->vars, id);
15036     return vtable_size(lvtbl->vars) - 1;
15037 }
15038 
15039 static int
15040 local_id_gen(struct parser_params *parser, ID id)
15041 {
15042     struct vtable *vars, *args;
15043 
15044     vars = lvtbl->vars;
15045     args = lvtbl->args;
15046 
15047     while (vars && POINTER_P(vars->prev)) {
15048         vars = vars->prev;
15049         args = args->prev;
15050     }
15051 
15052     if (vars && vars->prev == DVARS_INHERIT) {
15053         return rb_local_defined(id);
15054     }
15055     else {
15056         return (vtable_included(args, id) ||
15057                 vtable_included(vars, id));
15058     }
15059 }
15060 
15061 static const struct vtable *
15062 dyna_push_gen(struct parser_params *parser)
15063 {
15064     lvtbl->args = vtable_alloc(lvtbl->args);
15065     lvtbl->vars = vtable_alloc(lvtbl->vars);
15066     return lvtbl->args;
15067 }
15068 
15069 static void
15070 dyna_pop_1(struct parser_params *parser)
15071 {
15072     struct vtable *tmp;
15073 
15074     tmp = lvtbl->args;
15075     lvtbl->args = lvtbl->args->prev;
15076     vtable_free(tmp);
15077     tmp = lvtbl->vars;
15078     lvtbl->vars = lvtbl->vars->prev;
15079     vtable_free(tmp);
15080 }
15081 
15082 static void
15083 dyna_pop_gen(struct parser_params *parser, const struct vtable *lvargs)
15084 {
15085     while (lvtbl->args != lvargs) {
15086         dyna_pop_1(parser);
15087         if (!lvtbl->args) {
15088             struct local_vars *local = lvtbl->prev;
15089             xfree(lvtbl);
15090             lvtbl = local;
15091         }
15092     }
15093     dyna_pop_1(parser);
15094 }
15095 
15096 static int
15097 dyna_in_block_gen(struct parser_params *parser)
15098 {
15099     return POINTER_P(lvtbl->vars) && lvtbl->vars->prev != DVARS_TOPSCOPE;
15100 }
15101 
15102 static int
15103 dvar_defined_gen(struct parser_params *parser, ID id)
15104 {
15105     struct vtable *vars, *args;
15106 
15107     args = lvtbl->args;
15108     vars = lvtbl->vars;
15109 
15110     while (POINTER_P(vars)) {
15111         if (vtable_included(args, id)) {
15112             return 1;
15113         }
15114         if (vtable_included(vars, id)) {
15115             return 1;
15116         }
15117         args = args->prev;
15118         vars = vars->prev;
15119     }
15120 
15121     if (vars == DVARS_INHERIT) {
15122         return rb_dvar_defined(id);
15123     }
15124 
15125     return 0;
15126 }
15127 
15128 static int
15129 dvar_curr_gen(struct parser_params *parser, ID id)
15130 {
15131     return (vtable_included(lvtbl->args, id) ||
15132             vtable_included(lvtbl->vars, id));
15133 }
15134 
15135 #ifndef RIPPER
15136 VALUE rb_reg_compile(VALUE str, int options, const char *sourcefile, int sourceline);
15137 VALUE rb_reg_check_preprocess(VALUE);
15138 
15139 static void
15140 reg_fragment_setenc_gen(struct parser_params* parser, VALUE str, int options)
15141 {
15142     int c = RE_OPTION_ENCODING_IDX(options);
15143 
15144     if (c) {
15145         int opt, idx;
15146         rb_char_to_option_kcode(c, &opt, &idx);
15147         if (idx != ENCODING_GET(str) &&
15148             rb_enc_str_coderange(str) != ENC_CODERANGE_7BIT) {
15149             goto error;
15150         }
15151         ENCODING_SET(str, idx);
15152     }
15153     else if (RE_OPTION_ENCODING_NONE(options)) {
15154         if (!ENCODING_IS_ASCII8BIT(str) &&
15155             rb_enc_str_coderange(str) != ENC_CODERANGE_7BIT) {
15156             c = 'n';
15157             goto error;
15158         }
15159         rb_enc_associate(str, rb_ascii8bit_encoding());
15160     }
15161     else if (parser->enc == rb_usascii_encoding()) {
15162         if (rb_enc_str_coderange(str) != ENC_CODERANGE_7BIT) {
15163             /* raise in re.c */
15164             rb_enc_associate(str, rb_usascii_encoding());
15165         }
15166         else {
15167             rb_enc_associate(str, rb_ascii8bit_encoding());
15168         }
15169     }
15170     return;
15171 
15172   error:
15173     compile_error(PARSER_ARG
15174         "regexp encoding option '%c' differs from source encoding '%s'",
15175         c, rb_enc_name(rb_enc_get(str)));
15176 }
15177 
15178 static int
15179 reg_fragment_check_gen(struct parser_params* parser, VALUE str, int options)
15180 {
15181     VALUE err;
15182     reg_fragment_setenc(str, options);
15183     err = rb_reg_check_preprocess(str);
15184     if (err != Qnil) {
15185         err = rb_obj_as_string(err);
15186         compile_error(PARSER_ARG "%s", RSTRING_PTR(err));
15187         RB_GC_GUARD(err);
15188         return 0;
15189     }
15190     return 1;
15191 }
15192 
15193 typedef struct {
15194     struct parser_params* parser;
15195     rb_encoding *enc;
15196     NODE *succ_block;
15197     NODE *fail_block;
15198     int num;
15199 } reg_named_capture_assign_t;
15200 
15201 static int
15202 reg_named_capture_assign_iter(const OnigUChar *name, const OnigUChar *name_end,
15203           int back_num, int *back_refs, OnigRegex regex, void *arg0)
15204 {
15205     reg_named_capture_assign_t *arg = (reg_named_capture_assign_t*)arg0;
15206     struct parser_params* parser = arg->parser;
15207     rb_encoding *enc = arg->enc;
15208     long len = name_end - name;
15209     const char *s = (const char *)name;
15210     ID var;
15211 
15212     arg->num++;
15213 
15214     if (arg->succ_block == 0) {
15215         arg->succ_block = NEW_BEGIN(0);
15216         arg->fail_block = NEW_BEGIN(0);
15217     }
15218 
15219     if (!len || (*name != '_' && ISASCII(*name) && !rb_enc_islower(*name, enc)) ||
15220         (len < MAX_WORD_LENGTH && rb_reserved_word(s, (int)len)) ||
15221         !rb_enc_symname2_p(s, len, enc)) {
15222         return ST_CONTINUE;
15223     }
15224     var = rb_intern3(s, len, enc);
15225     if (dvar_defined(var) || local_id(var)) {
15226         rb_warningS("named capture conflicts a local variable - %s",
15227                     rb_id2name(var));
15228     }
15229     arg->succ_block = block_append(arg->succ_block,
15230         newline_node(node_assign(assignable(var,0),
15231             NEW_CALL(
15232               gettable(rb_intern("$~")),
15233               idAREF,
15234               NEW_LIST(NEW_LIT(ID2SYM(var))))
15235             )));
15236     arg->fail_block = block_append(arg->fail_block,
15237         newline_node(node_assign(assignable(var,0), NEW_LIT(Qnil))));
15238     return ST_CONTINUE;
15239 }
15240 
15241 static NODE *
15242 reg_named_capture_assign_gen(struct parser_params* parser, VALUE regexp, NODE *match)
15243 {
15244     reg_named_capture_assign_t arg;
15245 
15246     arg.parser = parser;
15247     arg.enc = rb_enc_get(regexp);
15248     arg.succ_block = 0;
15249     arg.fail_block = 0;
15250     arg.num = 0;
15251     onig_foreach_name(RREGEXP(regexp)->ptr, reg_named_capture_assign_iter, (void*)&arg);
15252 
15253     if (arg.num == 0)
15254         return match;
15255 
15256     return
15257         block_append(
15258             newline_node(match),
15259             NEW_IF(gettable(rb_intern("$~")),
15260                 block_append(
15261                     newline_node(arg.succ_block),
15262                     newline_node(
15263                         NEW_CALL(
15264                           gettable(rb_intern("$~")),
15265                           rb_intern("begin"),
15266                           NEW_LIST(NEW_LIT(INT2FIX(0)))))),
15267                 block_append(
15268                     newline_node(arg.fail_block),
15269                     newline_node(
15270                         NEW_LIT(Qnil)))));
15271 }
15272 
15273 static VALUE
15274 reg_compile_gen(struct parser_params* parser, VALUE str, int options)
15275 {
15276     VALUE re;
15277     VALUE err;
15278 
15279     reg_fragment_setenc(str, options);
15280     err = rb_errinfo();
15281     re = rb_reg_compile(str, options & RE_OPTION_MASK, ruby_sourcefile, ruby_sourceline);
15282     if (NIL_P(re)) {
15283         ID mesg = rb_intern("mesg");
15284         VALUE m = rb_attr_get(rb_errinfo(), mesg);
15285         rb_set_errinfo(err);
15286         if (!NIL_P(err)) {
15287             rb_str_append(rb_str_cat(rb_attr_get(err, mesg), "\n", 1), m);
15288         }
15289         else {
15290             compile_error(PARSER_ARG "%s", RSTRING_PTR(m));
15291         }
15292         return Qnil;
15293     }
15294     return re;
15295 }
15296 
15297 void
15298 rb_gc_mark_parser(void)
15299 {
15300 }
15301 
15302 NODE*
15303 rb_parser_append_print(VALUE vparser, NODE *node)
15304 {
15305     NODE *prelude = 0;
15306     NODE *scope = node;
15307     struct parser_params *parser;
15308 
15309     if (!node) return node;
15310 
15311     TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
15312 
15313     node = node->nd_body;
15314 
15315     if (nd_type(node) == NODE_PRELUDE) {
15316         prelude = node;
15317         node = node->nd_body;
15318     }
15319 
15320     node = block_append(node,
15321                         NEW_FCALL(rb_intern("print"),
15322                                   NEW_ARRAY(NEW_GVAR(rb_intern("$_")))));
15323     if (prelude) {
15324         prelude->nd_body = node;
15325         scope->nd_body = prelude;
15326     }
15327     else {
15328         scope->nd_body = node;
15329     }
15330 
15331     return scope;
15332 }
15333 
15334 NODE *
15335 rb_parser_while_loop(VALUE vparser, NODE *node, int chop, int split)
15336 {
15337     NODE *prelude = 0;
15338     NODE *scope = node;
15339     struct parser_params *parser;
15340 
15341     if (!node) return node;
15342 
15343     TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
15344 
15345     node = node->nd_body;
15346 
15347     if (nd_type(node) == NODE_PRELUDE) {
15348         prelude = node;
15349         node = node->nd_body;
15350     }
15351     if (split) {
15352         node = block_append(NEW_GASGN(rb_intern("$F"),
15353                                       NEW_CALL(NEW_GVAR(rb_intern("$_")),
15354                                                rb_intern("split"), 0)),
15355                             node);
15356     }
15357     if (chop) {
15358         node = block_append(NEW_CALL(NEW_GVAR(rb_intern("$_")),
15359                                      rb_intern("chop!"), 0), node);
15360     }
15361 
15362     node = NEW_OPT_N(node);
15363 
15364     if (prelude) {
15365         prelude->nd_body = node;
15366         scope->nd_body = prelude;
15367     }
15368     else {
15369         scope->nd_body = node;
15370     }
15371 
15372     return scope;
15373 }
15374 
15375 static const struct {
15376     ID token;
15377     const char *name;
15378 } op_tbl[] = {
15379     {tDOT2,     ".."},
15380     {tDOT3,     "..."},
15381     {'+',       "+(binary)"},
15382     {'-',       "-(binary)"},
15383     {tPOW,      "**"},
15384     {tUPLUS,    "+@"},
15385     {tUMINUS,   "-@"},
15386     {tCMP,      "<=>"},
15387     {tGEQ,      ">="},
15388     {tLEQ,      "<="},
15389     {tEQ,       "=="},
15390     {tEQQ,      "==="},
15391     {tNEQ,      "!="},
15392     {tMATCH,    "=~"},
15393     {tNMATCH,   "!~"},
15394     {tAREF,     "[]"},
15395     {tASET,     "[]="},
15396     {tLSHFT,    "<<"},
15397     {tRSHFT,    ">>"},
15398     {tCOLON2,   "::"},
15399 };
15400 
15401 #define op_tbl_count numberof(op_tbl)
15402 
15403 #ifndef ENABLE_SELECTOR_NAMESPACE
15404 #define ENABLE_SELECTOR_NAMESPACE 0
15405 #endif
15406 
15407 static struct symbols {
15408     ID last_id;
15409     st_table *sym_id;
15410     st_table *id_str;
15411 #if ENABLE_SELECTOR_NAMESPACE
15412     st_table *ivar2_id;
15413     st_table *id_ivar2;
15414 #endif
15415     VALUE op_sym[tLAST_TOKEN];
15416 } global_symbols = {tLAST_ID};
15417 
15418 static const struct st_hash_type symhash = {
15419     rb_str_hash_cmp,
15420     rb_str_hash,
15421 };
15422 
15423 #if ENABLE_SELECTOR_NAMESPACE
15424 struct ivar2_key {
15425     ID id;
15426     VALUE klass;
15427 };
15428 
15429 static int
15430 ivar2_cmp(struct ivar2_key *key1, struct ivar2_key *key2)
15431 {
15432     if (key1->id == key2->id && key1->klass == key2->klass) {
15433         return 0;
15434     }
15435     return 1;
15436 }
15437 
15438 static int
15439 ivar2_hash(struct ivar2_key *key)
15440 {
15441     return (key->id << 8) ^ (key->klass >> 2);
15442 }
15443 
15444 static const struct st_hash_type ivar2_hash_type = {
15445     ivar2_cmp,
15446     ivar2_hash,
15447 };
15448 #endif
15449 
15450 void
15451 Init_sym(void)
15452 {
15453     global_symbols.sym_id = st_init_table_with_size(&symhash, 1000);
15454     global_symbols.id_str = st_init_numtable_with_size(1000);
15455 #if ENABLE_SELECTOR_NAMESPACE
15456     global_symbols.ivar2_id = st_init_table_with_size(&ivar2_hash_type, 1000);
15457     global_symbols.id_ivar2 = st_init_numtable_with_size(1000);
15458 #endif
15459 
15460     Init_id();
15461 }
15462 
15463 void
15464 rb_gc_mark_symbols(void)
15465 {
15466     rb_mark_tbl(global_symbols.id_str);
15467     rb_gc_mark_locations(global_symbols.op_sym,
15468                          global_symbols.op_sym + tLAST_TOKEN);
15469 }
15470 #endif /* !RIPPER */
15471 
15472 static ID
15473 internal_id_gen(struct parser_params *parser)
15474 {
15475     ID id = (ID)vtable_size(lvtbl->args) + (ID)vtable_size(lvtbl->vars);
15476     id += ((tLAST_TOKEN - ID_INTERNAL) >> ID_SCOPE_SHIFT) + 1;
15477     return ID_INTERNAL | (id << ID_SCOPE_SHIFT);
15478 }
15479 
15480 #ifndef RIPPER
15481 static int
15482 is_special_global_name(const char *m, const char *e, rb_encoding *enc)
15483 {
15484     int mb = 0;
15485 
15486     if (m >= e) return 0;
15487     switch (*m) {
15488       case '~': case '*': case '$': case '?': case '!': case '@':
15489       case '/': case '\\': case ';': case ',': case '.': case '=':
15490       case ':': case '<': case '>': case '\"':
15491       case '&': case '`': case '\'': case '+':
15492       case '0':
15493         ++m;
15494         break;
15495       case '-':
15496         ++m;
15497         if (m < e && is_identchar(m, e, enc)) {
15498             if (!ISASCII(*m)) mb = 1;
15499             m += rb_enc_mbclen(m, e, enc);
15500         }
15501         break;
15502       default:
15503         if (!rb_enc_isdigit(*m, enc)) return 0;
15504         do {
15505             if (!ISASCII(*m)) mb = 1;
15506             ++m;
15507         } while (m < e && rb_enc_isdigit(*m, enc));
15508     }
15509     return m == e ? mb + 1 : 0;
15510 }
15511 
15512 int
15513 rb_symname_p(const char *name)
15514 {
15515     return rb_enc_symname_p(name, rb_ascii8bit_encoding());
15516 }
15517 
15518 int
15519 rb_enc_symname_p(const char *name, rb_encoding *enc)
15520 {
15521     return rb_enc_symname2_p(name, strlen(name), enc);
15522 }
15523 
15524 int
15525 rb_enc_symname2_p(const char *name, long len, rb_encoding *enc)
15526 {
15527     const char *m = name;
15528     const char *e = m + len;
15529     int localid = FALSE;
15530 
15531     if (!m) return FALSE;
15532     switch (*m) {
15533       case '\0':
15534         return FALSE;
15535 
15536       case '$':
15537         if (is_special_global_name(++m, e, enc)) return TRUE;
15538         goto id;
15539 
15540       case '@':
15541         if (*++m == '@') ++m;
15542         goto id;
15543 
15544       case '<':
15545         switch (*++m) {
15546           case '<': ++m; break;
15547           case '=': if (*++m == '>') ++m; break;
15548           default: break;
15549         }
15550         break;
15551 
15552       case '>':
15553         switch (*++m) {
15554           case '>': case '=': ++m; break;
15555         }
15556         break;
15557 
15558       case '=':
15559         switch (*++m) {
15560           case '~': ++m; break;
15561           case '=': if (*++m == '=') ++m; break;
15562           default: return FALSE;
15563         }
15564         break;
15565 
15566       case '*':
15567         if (*++m == '*') ++m;
15568         break;
15569 
15570       case '+': case '-':
15571         if (*++m == '@') ++m;
15572         break;
15573 
15574       case '|': case '^': case '&': case '/': case '%': case '~': case '`':
15575         ++m;
15576         break;
15577 
15578       case '[':
15579         if (*++m != ']') return FALSE;
15580         if (*++m == '=') ++m;
15581         break;
15582 
15583       case '!':
15584         switch (*++m) {
15585           case '\0': return TRUE;
15586           case '=': case '~': ++m; break;
15587           default: return FALSE;
15588         }
15589         break;
15590 
15591       default:
15592         localid = !rb_enc_isupper(*m, enc);
15593       id:
15594         if (m >= e || (*m != '_' && !rb_enc_isalpha(*m, enc) && ISASCII(*m)))
15595             return FALSE;
15596         while (m < e && is_identchar(m, e, enc)) m += rb_enc_mbclen(m, e, enc);
15597         if (localid) {
15598             switch (*m) {
15599               case '!': case '?': case '=': ++m;
15600             }
15601         }
15602         break;
15603     }
15604     return m == e;
15605 }
15606 
15607 static ID
15608 register_symid(ID id, const char *name, long len, rb_encoding *enc)
15609 {
15610     VALUE str = rb_enc_str_new(name, len, enc);
15611     OBJ_FREEZE(str);
15612     st_add_direct(global_symbols.sym_id, (st_data_t)str, id);
15613     st_add_direct(global_symbols.id_str, id, (st_data_t)str);
15614     return id;
15615 }
15616 
15617 ID
15618 rb_intern3(const char *name, long len, rb_encoding *enc)
15619 {
15620     const char *m = name;
15621     const char *e = m + len;
15622     unsigned char c;
15623     VALUE str;
15624     ID id;
15625     long last;
15626     int mb;
15627     st_data_t data;
15628     struct RString fake_str;
15629     fake_str.basic.flags = T_STRING|RSTRING_NOEMBED|FL_FREEZE;
15630     fake_str.basic.klass = rb_cString;
15631     fake_str.as.heap.len = len;
15632     fake_str.as.heap.ptr = (char *)name;
15633     fake_str.as.heap.aux.capa = len;
15634     str = (VALUE)&fake_str;
15635     rb_enc_associate(str, enc);
15636 
15637     if (rb_enc_str_coderange(str) == ENC_CODERANGE_BROKEN) {
15638         rb_raise(rb_eEncodingError, "invalid encoding symbol");
15639     }
15640 
15641     if (st_lookup(global_symbols.sym_id, str, &data))
15642         return (ID)data;
15643 
15644     if (rb_cString && !rb_enc_asciicompat(enc)) {
15645         id = ID_JUNK;
15646         goto new_id;
15647     }
15648     last = len-1;
15649     id = 0;
15650     switch (*m) {
15651       case '$':
15652         id |= ID_GLOBAL;
15653         if ((mb = is_special_global_name(++m, e, enc)) != 0) {
15654             if (!--mb) enc = rb_ascii8bit_encoding();
15655             goto new_id;
15656         }
15657         break;
15658       case '@':
15659         if (m[1] == '@') {
15660             m++;
15661             id |= ID_CLASS;
15662         }
15663         else {
15664             id |= ID_INSTANCE;
15665         }
15666         m++;
15667         break;
15668       default:
15669         c = m[0];
15670         if (c != '_' && rb_enc_isascii(c, enc) && rb_enc_ispunct(c, enc)) {
15671             /* operators */
15672             int i;
15673 
15674             if (len == 1) {
15675                 id = c;
15676                 goto id_register;
15677             }
15678             for (i = 0; i < op_tbl_count; i++) {
15679                 if (*op_tbl[i].name == *m &&
15680                     strcmp(op_tbl[i].name, m) == 0) {
15681                     id = op_tbl[i].token;
15682                     goto id_register;
15683                 }
15684             }
15685         }
15686 
15687         if (m[last] == '=') {
15688             /* attribute assignment */
15689             id = rb_intern3(name, last, enc);
15690             if (id > tLAST_TOKEN && !is_attrset_id(id)) {
15691                 enc = rb_enc_get(rb_id2str(id));
15692                 id = rb_id_attrset(id);
15693                 goto id_register;
15694             }
15695             id = ID_ATTRSET;
15696         }
15697         else if (rb_enc_isupper(m[0], enc)) {
15698             id = ID_CONST;
15699         }
15700         else {
15701             id = ID_LOCAL;
15702         }
15703         break;
15704     }
15705     mb = 0;
15706     if (!rb_enc_isdigit(*m, enc)) {
15707         while (m <= name + last && is_identchar(m, e, enc)) {
15708             if (ISASCII(*m)) {
15709                 m++;
15710             }
15711             else {
15712                 mb = 1;
15713                 m += rb_enc_mbclen(m, e, enc);
15714             }
15715         }
15716     }
15717     if (m - name < len) id = ID_JUNK;
15718     if (enc != rb_usascii_encoding()) {
15719         /*
15720          * this clause makes sense only when called from other than
15721          * rb_intern_str() taking care of code-range.
15722          */
15723         if (!mb) {
15724             for (; m <= name + len; ++m) {
15725                 if (!ISASCII(*m)) goto mbstr;
15726             }
15727             enc = rb_usascii_encoding();
15728         }
15729       mbstr:;
15730     }
15731   new_id:
15732     if (global_symbols.last_id >= ~(ID)0 >> (ID_SCOPE_SHIFT+RUBY_SPECIAL_SHIFT)) {
15733         if (len > 20) {
15734             rb_raise(rb_eRuntimeError, "symbol table overflow (symbol %.20s...)",
15735                      name);
15736         }
15737         else {
15738             rb_raise(rb_eRuntimeError, "symbol table overflow (symbol %.*s)",
15739                      (int)len, name);
15740         }
15741     }
15742     id |= ++global_symbols.last_id << ID_SCOPE_SHIFT;
15743   id_register:
15744     return register_symid(id, name, len, enc);
15745 }
15746 
15747 ID
15748 rb_intern2(const char *name, long len)
15749 {
15750     return rb_intern3(name, len, rb_usascii_encoding());
15751 }
15752 
15753 #undef rb_intern
15754 ID
15755 rb_intern(const char *name)
15756 {
15757     return rb_intern2(name, strlen(name));
15758 }
15759 
15760 ID
15761 rb_intern_str(VALUE str)
15762 {
15763     rb_encoding *enc;
15764     ID id;
15765 
15766     if (rb_enc_str_coderange(str) == ENC_CODERANGE_7BIT) {
15767         enc = rb_usascii_encoding();
15768     }
15769     else {
15770         enc = rb_enc_get(str);
15771     }
15772     id = rb_intern3(RSTRING_PTR(str), RSTRING_LEN(str), enc);
15773     RB_GC_GUARD(str);
15774     return id;
15775 }
15776 
15777 VALUE
15778 rb_id2str(ID id)
15779 {
15780     st_data_t data;
15781 
15782     if (id < tLAST_TOKEN) {
15783         int i = 0;
15784 
15785         if (id < INT_MAX && rb_ispunct((int)id)) {
15786             VALUE str = global_symbols.op_sym[i = (int)id];
15787             if (!str) {
15788                 char name[2];
15789                 name[0] = (char)id;
15790                 name[1] = 0;
15791                 str = rb_usascii_str_new(name, 1);
15792                 OBJ_FREEZE(str);
15793                 global_symbols.op_sym[i] = str;
15794             }
15795             return str;
15796         }
15797         for (i = 0; i < op_tbl_count; i++) {
15798             if (op_tbl[i].token == id) {
15799                 VALUE str = global_symbols.op_sym[i];
15800                 if (!str) {
15801                     str = rb_usascii_str_new2(op_tbl[i].name);
15802                     OBJ_FREEZE(str);
15803                     global_symbols.op_sym[i] = str;
15804                 }
15805                 return str;
15806             }
15807         }
15808     }
15809 
15810     if (st_lookup(global_symbols.id_str, id, &data)) {
15811         VALUE str = (VALUE)data;
15812         if (RBASIC(str)->klass == 0)
15813             RBASIC(str)->klass = rb_cString;
15814         return str;
15815     }
15816 
15817     if (is_attrset_id(id)) {
15818         ID id2 = (id & ~ID_SCOPE_MASK) | ID_LOCAL;
15819         VALUE str;
15820 
15821         while (!(str = rb_id2str(id2))) {
15822             if (!is_local_id(id2)) return 0;
15823             id2 = (id & ~ID_SCOPE_MASK) | ID_CONST;
15824         }
15825         str = rb_str_dup(str);
15826         rb_str_cat(str, "=", 1);
15827         rb_intern_str(str);
15828         if (st_lookup(global_symbols.id_str, id, &data)) {
15829             VALUE str = (VALUE)data;
15830             if (RBASIC(str)->klass == 0)
15831                 RBASIC(str)->klass = rb_cString;
15832             return str;
15833         }
15834     }
15835     return 0;
15836 }
15837 
15838 const char *
15839 rb_id2name(ID id)
15840 {
15841     VALUE str = rb_id2str(id);
15842 
15843     if (!str) return 0;
15844     return RSTRING_PTR(str);
15845 }
15846 
15847 static int
15848 symbols_i(VALUE sym, ID value, VALUE ary)
15849 {
15850     rb_ary_push(ary, ID2SYM(value));
15851     return ST_CONTINUE;
15852 }
15853 
15854 /*
15855  *  call-seq:
15856  *     Symbol.all_symbols    => array
15857  *
15858  *  Returns an array of all the symbols currently in Ruby's symbol
15859  *  table.
15860  *
15861  *     Symbol.all_symbols.size    #=> 903
15862  *     Symbol.all_symbols[1,20]   #=> [:floor, :ARGV, :Binding, :symlink,
15863  *                                     :chown, :EOFError, :$;, :String,
15864  *                                     :LOCK_SH, :"setuid?", :$<,
15865  *                                     :default_proc, :compact, :extend,
15866  *                                     :Tms, :getwd, :$=, :ThreadGroup,
15867  *                                     :wait2, :$>]
15868  */
15869 
15870 VALUE
15871 rb_sym_all_symbols(void)
15872 {
15873     VALUE ary = rb_ary_new2(global_symbols.sym_id->num_entries);
15874 
15875     st_foreach(global_symbols.sym_id, symbols_i, ary);
15876     return ary;
15877 }
15878 
15879 int
15880 rb_is_const_id(ID id)
15881 {
15882     return is_const_id(id);
15883 }
15884 
15885 int
15886 rb_is_class_id(ID id)
15887 {
15888     return is_class_id(id);
15889 }
15890 
15891 int
15892 rb_is_instance_id(ID id)
15893 {
15894     return is_instance_id(id);
15895 }
15896 
15897 int
15898 rb_is_local_id(ID id)
15899 {
15900     return is_local_id(id);
15901 }
15902 
15903 int
15904 rb_is_junk_id(ID id)
15905 {
15906     return is_junk_id(id);
15907 }
15908 
15909 #endif /* !RIPPER */
15910 
15911 static void
15912 parser_initialize(struct parser_params *parser)
15913 {
15914     parser->eofp = Qfalse;
15915 
15916     parser->parser_lex_strterm = 0;
15917     parser->parser_cond_stack = 0;
15918     parser->parser_cmdarg_stack = 0;
15919     parser->parser_class_nest = 0;
15920     parser->parser_paren_nest = 0;
15921     parser->parser_lpar_beg = 0;
15922     parser->parser_in_single = 0;
15923     parser->parser_in_def = 0;
15924     parser->parser_in_defined = 0;
15925     parser->parser_compile_for_eval = 0;
15926     parser->parser_cur_mid = 0;
15927     parser->parser_tokenbuf = NULL;
15928     parser->parser_tokidx = 0;
15929     parser->parser_toksiz = 0;
15930     parser->parser_heredoc_end = 0;
15931     parser->parser_command_start = TRUE;
15932     parser->parser_deferred_nodes = 0;
15933     parser->parser_lex_pbeg = 0;
15934     parser->parser_lex_p = 0;
15935     parser->parser_lex_pend = 0;
15936     parser->parser_lvtbl = 0;
15937     parser->parser_ruby__end__seen = 0;
15938     parser->parser_ruby_sourcefile = 0;
15939 #ifndef RIPPER
15940     parser->is_ripper = 0;
15941     parser->parser_eval_tree_begin = 0;
15942     parser->parser_eval_tree = 0;
15943 #else
15944     parser->is_ripper = 1;
15945     parser->parser_ruby_sourcefile_string = Qnil;
15946     parser->delayed = Qnil;
15947 
15948     parser->result = Qnil;
15949     parser->parsing_thread = Qnil;
15950     parser->toplevel_p = TRUE;
15951 #endif
15952 #ifdef YYMALLOC
15953     parser->heap = NULL;
15954 #endif
15955     parser->enc = rb_usascii_encoding();
15956 }
15957 
15958 #ifdef RIPPER
15959 #define parser_mark ripper_parser_mark
15960 #define parser_free ripper_parser_free
15961 #endif
15962 
15963 static void
15964 parser_mark(void *ptr)
15965 {
15966     struct parser_params *p = (struct parser_params*)ptr;
15967 
15968     rb_gc_mark((VALUE)p->parser_lex_strterm);
15969     rb_gc_mark((VALUE)p->parser_deferred_nodes);
15970     rb_gc_mark(p->parser_lex_input);
15971     rb_gc_mark(p->parser_lex_lastline);
15972     rb_gc_mark(p->parser_lex_nextline);
15973 #ifndef RIPPER
15974     rb_gc_mark((VALUE)p->parser_eval_tree_begin) ;
15975     rb_gc_mark((VALUE)p->parser_eval_tree) ;
15976     rb_gc_mark(p->debug_lines);
15977 #else
15978     rb_gc_mark(p->parser_ruby_sourcefile_string);
15979     rb_gc_mark(p->delayed);
15980     rb_gc_mark(p->value);
15981     rb_gc_mark(p->result);
15982     rb_gc_mark(p->parsing_thread);
15983 #endif
15984 #ifdef YYMALLOC
15985     rb_gc_mark((VALUE)p->heap);
15986 #endif
15987 }
15988 
15989 static void
15990 parser_free(void *ptr)
15991 {
15992     struct parser_params *p = (struct parser_params*)ptr;
15993     struct local_vars *local, *prev;
15994 
15995     if (p->parser_tokenbuf) {
15996         xfree(p->parser_tokenbuf);
15997     }
15998     for (local = p->parser_lvtbl; local; local = prev) {
15999         if (local->vars) xfree(local->vars);
16000         prev = local->prev;
16001         xfree(local);
16002     }
16003 #ifndef RIPPER
16004     xfree(p->parser_ruby_sourcefile);
16005 #endif
16006     xfree(p);
16007 }
16008 
16009 static size_t
16010 parser_memsize(const void *ptr)
16011 {
16012     struct parser_params *p = (struct parser_params*)ptr;
16013     struct local_vars *local;
16014     size_t size = sizeof(*p);
16015 
16016     if (!ptr) return 0;
16017     size += p->parser_toksiz;
16018     for (local = p->parser_lvtbl; local; local = local->prev) {
16019         size += sizeof(*local);
16020         if (local->vars) size += local->vars->capa * sizeof(ID);
16021     }
16022 #ifndef RIPPER
16023     if (p->parser_ruby_sourcefile) {
16024         size += strlen(p->parser_ruby_sourcefile) + 1;
16025     }
16026 #endif
16027     return size;
16028 }
16029 
16030 static const rb_data_type_t parser_data_type = {
16031     "parser",
16032     parser_mark,
16033     parser_free,
16034     parser_memsize,
16035 };
16036 
16037 VALUE rb_parser_get_yydebug(VALUE);
16038 VALUE rb_parser_set_yydebug(VALUE, VALUE);
16039 
16040 #ifndef RIPPER
16041 #undef rb_reserved_word
16042 
16043 const struct kwtable *
16044 rb_reserved_word(const char *str, unsigned int len)
16045 {
16046     return reserved_word(str, len);
16047 }
16048 
16049 static struct parser_params *
16050 parser_new(void)
16051 {
16052     struct parser_params *p;
16053 
16054     p = ALLOC_N(struct parser_params, 1);
16055     MEMZERO(p, struct parser_params, 1);
16056     parser_initialize(p);
16057     return p;
16058 }
16059 
16060 VALUE
16061 rb_parser_new(void)
16062 {
16063     struct parser_params *p = parser_new();
16064 
16065     return TypedData_Wrap_Struct(0, &parser_data_type, p);
16066 }
16067 
16068 /*
16069  *  call-seq:
16070  *    ripper#end_seen?   -> Boolean
16071  *
16072  *  Return if parsed source ended by +\_\_END\_\_+.
16073  *  This number starts from 1.
16074  */
16075 VALUE
16076 rb_parser_end_seen_p(VALUE vparser)
16077 {
16078     struct parser_params *parser;
16079 
16080     TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
16081     return ruby__end__seen ? Qtrue : Qfalse;
16082 }
16083 
16084 /*
16085  *  call-seq:
16086  *    ripper#encoding   -> encoding
16087  *
16088  *  Return encoding of the source.
16089  */
16090 VALUE
16091 rb_parser_encoding(VALUE vparser)
16092 {
16093     struct parser_params *parser;
16094 
16095     TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
16096     return rb_enc_from_encoding(parser->enc);
16097 }
16098 
16099 /*
16100  *  call-seq:
16101  *    ripper.yydebug   -> true or false
16102  *
16103  *  Get yydebug.
16104  */
16105 VALUE
16106 rb_parser_get_yydebug(VALUE self)
16107 {
16108     struct parser_params *parser;
16109 
16110     TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16111     return yydebug ? Qtrue : Qfalse;
16112 }
16113 
16114 /*
16115  *  call-seq:
16116  *    ripper.yydebug = flag
16117  *
16118  *  Set yydebug.
16119  */
16120 VALUE
16121 rb_parser_set_yydebug(VALUE self, VALUE flag)
16122 {
16123     struct parser_params *parser;
16124 
16125     TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16126     yydebug = RTEST(flag);
16127     return flag;
16128 }
16129 
16130 #ifdef YYMALLOC
16131 #define HEAPCNT(n, size) ((n) * (size) / sizeof(YYSTYPE))
16132 #define NEWHEAP() rb_node_newnode(NODE_ALLOCA, 0, (VALUE)parser->heap, 0)
16133 #define ADD2HEAP(n, c, p) ((parser->heap = (n))->u1.node = (p), \
16134                            (n)->u3.cnt = (c), (p))
16135 
16136 void *
16137 rb_parser_malloc(struct parser_params *parser, size_t size)
16138 {
16139     size_t cnt = HEAPCNT(1, size);
16140     NODE *n = NEWHEAP();
16141     void *ptr = xmalloc(size);
16142 
16143     return ADD2HEAP(n, cnt, ptr);
16144 }
16145 
16146 void *
16147 rb_parser_calloc(struct parser_params *parser, size_t nelem, size_t size)
16148 {
16149     size_t cnt = HEAPCNT(nelem, size);
16150     NODE *n = NEWHEAP();
16151     void *ptr = xcalloc(nelem, size);
16152 
16153     return ADD2HEAP(n, cnt, ptr);
16154 }
16155 
16156 void *
16157 rb_parser_realloc(struct parser_params *parser, void *ptr, size_t size)
16158 {
16159     NODE *n;
16160     size_t cnt = HEAPCNT(1, size);
16161 
16162     if (ptr && (n = parser->heap) != NULL) {
16163         do {
16164             if (n->u1.node == ptr) {
16165                 n->u1.node = ptr = xrealloc(ptr, size);
16166                 if (n->u3.cnt) n->u3.cnt = cnt;
16167                 return ptr;
16168             }
16169         } while ((n = n->u2.node) != NULL);
16170     }
16171     n = NEWHEAP();
16172     ptr = xrealloc(ptr, size);
16173     return ADD2HEAP(n, cnt, ptr);
16174 }
16175 
16176 void
16177 rb_parser_free(struct parser_params *parser, void *ptr)
16178 {
16179     NODE **prev = &parser->heap, *n;
16180 
16181     while ((n = *prev) != NULL) {
16182         if (n->u1.node == ptr) {
16183             *prev = n->u2.node;
16184             rb_gc_force_recycle((VALUE)n);
16185             break;
16186         }
16187         prev = &n->u2.node;
16188     }
16189     xfree(ptr);
16190 }
16191 #endif
16192 #endif
16193 
16194 #ifdef RIPPER
16195 #ifdef RIPPER_DEBUG
16196 extern int rb_is_pointer_to_heap(VALUE);
16197 
16198 /* :nodoc: */
16199 static VALUE
16200 ripper_validate_object(VALUE self, VALUE x)
16201 {
16202     if (x == Qfalse) return x;
16203     if (x == Qtrue) return x;
16204     if (x == Qnil) return x;
16205     if (x == Qundef)
16206         rb_raise(rb_eArgError, "Qundef given");
16207     if (FIXNUM_P(x)) return x;
16208     if (SYMBOL_P(x)) return x;
16209     if (!rb_is_pointer_to_heap(x))
16210         rb_raise(rb_eArgError, "invalid pointer: %p", x);
16211     switch (TYPE(x)) {
16212       case T_STRING:
16213       case T_OBJECT:
16214       case T_ARRAY:
16215       case T_BIGNUM:
16216       case T_FLOAT:
16217         return x;
16218       case T_NODE:
16219         if (nd_type(x) != NODE_LASGN) {
16220             rb_raise(rb_eArgError, "NODE given: %p", x);
16221         }
16222         return ((NODE *)x)->nd_rval;
16223       default:
16224         rb_raise(rb_eArgError, "wrong type of ruby object: %p (%s)",
16225                  x, rb_obj_classname(x));
16226     }
16227     return x;
16228 }
16229 #endif
16230 
16231 #define validate(x) (x = get_value(x))
16232 
16233 static VALUE
16234 ripper_dispatch0(struct parser_params *parser, ID mid)
16235 {
16236     return rb_funcall(parser->value, mid, 0);
16237 }
16238 
16239 static VALUE
16240 ripper_dispatch1(struct parser_params *parser, ID mid, VALUE a)
16241 {
16242     validate(a);
16243     return rb_funcall(parser->value, mid, 1, a);
16244 }
16245 
16246 static VALUE
16247 ripper_dispatch2(struct parser_params *parser, ID mid, VALUE a, VALUE b)
16248 {
16249     validate(a);
16250     validate(b);
16251     return rb_funcall(parser->value, mid, 2, a, b);
16252 }
16253 
16254 static VALUE
16255 ripper_dispatch3(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c)
16256 {
16257     validate(a);
16258     validate(b);
16259     validate(c);
16260     return rb_funcall(parser->value, mid, 3, a, b, c);
16261 }
16262 
16263 static VALUE
16264 ripper_dispatch4(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c, VALUE d)
16265 {
16266     validate(a);
16267     validate(b);
16268     validate(c);
16269     validate(d);
16270     return rb_funcall(parser->value, mid, 4, a, b, c, d);
16271 }
16272 
16273 static VALUE
16274 ripper_dispatch5(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c, VALUE d, VALUE e)
16275 {
16276     validate(a);
16277     validate(b);
16278     validate(c);
16279     validate(d);
16280     validate(e);
16281     return rb_funcall(parser->value, mid, 5, a, b, c, d, e);
16282 }
16283 
16284 static const struct kw_assoc {
16285     ID id;
16286     const char *name;
16287 } keyword_to_name[] = {
16288     {keyword_class,     "class"},
16289     {keyword_module,    "module"},
16290     {keyword_def,       "def"},
16291     {keyword_undef,     "undef"},
16292     {keyword_begin,     "begin"},
16293     {keyword_rescue,    "rescue"},
16294     {keyword_ensure,    "ensure"},
16295     {keyword_end,       "end"},
16296     {keyword_if,        "if"},
16297     {keyword_unless,    "unless"},
16298     {keyword_then,      "then"},
16299     {keyword_elsif,     "elsif"},
16300     {keyword_else,      "else"},
16301     {keyword_case,      "case"},
16302     {keyword_when,      "when"},
16303     {keyword_while,     "while"},
16304     {keyword_until,     "until"},
16305     {keyword_for,       "for"},
16306     {keyword_break,     "break"},
16307     {keyword_next,      "next"},
16308     {keyword_redo,      "redo"},
16309     {keyword_retry,     "retry"},
16310     {keyword_in,        "in"},
16311     {keyword_do,        "do"},
16312     {keyword_do_cond,   "do"},
16313     {keyword_do_block,  "do"},
16314     {keyword_return,    "return"},
16315     {keyword_yield,     "yield"},
16316     {keyword_super,     "super"},
16317     {keyword_self,      "self"},
16318     {keyword_nil,       "nil"},
16319     {keyword_true,      "true"},
16320     {keyword_false,     "false"},
16321     {keyword_and,       "and"},
16322     {keyword_or,        "or"},
16323     {keyword_not,       "not"},
16324     {modifier_if,       "if"},
16325     {modifier_unless,   "unless"},
16326     {modifier_while,    "while"},
16327     {modifier_until,    "until"},
16328     {modifier_rescue,   "rescue"},
16329     {keyword_alias,     "alias"},
16330     {keyword_defined,   "defined?"},
16331     {keyword_BEGIN,     "BEGIN"},
16332     {keyword_END,       "END"},
16333     {keyword__LINE__,   "__LINE__"},
16334     {keyword__FILE__,   "__FILE__"},
16335     {keyword__ENCODING__, "__ENCODING__"},
16336     {0, NULL}
16337 };
16338 
16339 static const char*
16340 keyword_id_to_str(ID id)
16341 {
16342     const struct kw_assoc *a;
16343 
16344     for (a = keyword_to_name; a->id; a++) {
16345         if (a->id == id)
16346             return a->name;
16347     }
16348     return NULL;
16349 }
16350 
16351 #undef ripper_id2sym
16352 static VALUE
16353 ripper_id2sym(ID id)
16354 {
16355     const char *name;
16356     char buf[8];
16357 
16358     if (id <= 256) {
16359         buf[0] = (char)id;
16360         buf[1] = '\0';
16361         return ID2SYM(rb_intern2(buf, 1));
16362     }
16363     if ((name = keyword_id_to_str(id))) {
16364         return ID2SYM(rb_intern(name));
16365     }
16366     switch (id) {
16367       case tOROP:
16368         name = "||";
16369         break;
16370       case tANDOP:
16371         name = "&&";
16372         break;
16373       default:
16374         name = rb_id2name(id);
16375         if (!name) {
16376             rb_bug("cannot convert ID to string: %ld", (unsigned long)id);
16377         }
16378         return ID2SYM(id);
16379     }
16380     return ID2SYM(rb_intern(name));
16381 }
16382 
16383 static ID
16384 ripper_get_id(VALUE v)
16385 {
16386     NODE *nd;
16387     if (!RB_TYPE_P(v, T_NODE)) return 0;
16388     nd = (NODE *)v;
16389     if (nd_type(nd) != NODE_LASGN) return 0;
16390     return nd->nd_vid;
16391 }
16392 
16393 static VALUE
16394 ripper_get_value(VALUE v)
16395 {
16396     NODE *nd;
16397     if (v == Qundef) return Qnil;
16398     if (!RB_TYPE_P(v, T_NODE)) return v;
16399     nd = (NODE *)v;
16400     if (nd_type(nd) != NODE_LASGN) return Qnil;
16401     return nd->nd_rval;
16402 }
16403 
16404 static void
16405 ripper_compile_error(struct parser_params *parser, const char *fmt, ...)
16406 {
16407     VALUE str;
16408     va_list args;
16409 
16410     va_start(args, fmt);
16411     str = rb_vsprintf(fmt, args);
16412     va_end(args);
16413     rb_funcall(parser->value, rb_intern("compile_error"), 1, str);
16414 }
16415 
16416 static void
16417 ripper_warn0(struct parser_params *parser, const char *fmt)
16418 {
16419     rb_funcall(parser->value, rb_intern("warn"), 1, STR_NEW2(fmt));
16420 }
16421 
16422 static void
16423 ripper_warnI(struct parser_params *parser, const char *fmt, int a)
16424 {
16425     rb_funcall(parser->value, rb_intern("warn"), 2,
16426                STR_NEW2(fmt), INT2NUM(a));
16427 }
16428 
16429 #if 0
16430 static void
16431 ripper_warnS(struct parser_params *parser, const char *fmt, const char *str)
16432 {
16433     rb_funcall(parser->value, rb_intern("warn"), 2,
16434                STR_NEW2(fmt), STR_NEW2(str));
16435 }
16436 #endif
16437 
16438 static void
16439 ripper_warning0(struct parser_params *parser, const char *fmt)
16440 {
16441     rb_funcall(parser->value, rb_intern("warning"), 1, STR_NEW2(fmt));
16442 }
16443 
16444 static void
16445 ripper_warningS(struct parser_params *parser, const char *fmt, const char *str)
16446 {
16447     rb_funcall(parser->value, rb_intern("warning"), 2,
16448                STR_NEW2(fmt), STR_NEW2(str));
16449 }
16450 
16451 static VALUE
16452 ripper_lex_get_generic(struct parser_params *parser, VALUE src)
16453 {
16454     return rb_funcall(src, ripper_id_gets, 0);
16455 }
16456 
16457 static VALUE
16458 ripper_s_allocate(VALUE klass)
16459 {
16460     struct parser_params *p;
16461     VALUE self;
16462 
16463     p = ALLOC_N(struct parser_params, 1);
16464     MEMZERO(p, struct parser_params, 1);
16465     self = TypedData_Wrap_Struct(klass, &parser_data_type, p);
16466     p->value = self;
16467     return self;
16468 }
16469 
16470 #define ripper_initialized_p(r) ((r)->parser_lex_input != 0)
16471 
16472 /*
16473  *  call-seq:
16474  *    Ripper.new(src, filename="(ripper)", lineno=1) -> ripper
16475  *
16476  *  Create a new Ripper object.
16477  *  _src_ must be a String, an IO, or an Object which has #gets method.
16478  *
16479  *  This method does not starts parsing.
16480  *  See also Ripper#parse and Ripper.parse.
16481  */
16482 static VALUE
16483 ripper_initialize(int argc, VALUE *argv, VALUE self)
16484 {
16485     struct parser_params *parser;
16486     VALUE src, fname, lineno;
16487 
16488     TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16489     rb_scan_args(argc, argv, "12", &src, &fname, &lineno);
16490     if (rb_obj_respond_to(src, ripper_id_gets, 0)) {
16491         parser->parser_lex_gets = ripper_lex_get_generic;
16492     }
16493     else {
16494         StringValue(src);
16495         parser->parser_lex_gets = lex_get_str;
16496     }
16497     parser->parser_lex_input = src;
16498     parser->eofp = Qfalse;
16499     if (NIL_P(fname)) {
16500         fname = STR_NEW2("(ripper)");
16501     }
16502     else {
16503         StringValue(fname);
16504     }
16505     parser_initialize(parser);
16506 
16507     parser->parser_ruby_sourcefile_string = fname;
16508     parser->parser_ruby_sourcefile = RSTRING_PTR(fname);
16509     parser->parser_ruby_sourceline = NIL_P(lineno) ? 0 : NUM2INT(lineno) - 1;
16510 
16511     return Qnil;
16512 }
16513 
16514 extern VALUE rb_thread_pass(void);
16515 
16516 struct ripper_args {
16517     struct parser_params *parser;
16518     int argc;
16519     VALUE *argv;
16520 };
16521 
16522 static VALUE
16523 ripper_parse0(VALUE parser_v)
16524 {
16525     struct parser_params *parser;
16526 
16527     TypedData_Get_Struct(parser_v, struct parser_params, &parser_data_type, parser);
16528     parser_prepare(parser);
16529     ripper_yyparse((void*)parser);
16530     return parser->result;
16531 }
16532 
16533 static VALUE
16534 ripper_ensure(VALUE parser_v)
16535 {
16536     struct parser_params *parser;
16537 
16538     TypedData_Get_Struct(parser_v, struct parser_params, &parser_data_type, parser);
16539     parser->parsing_thread = Qnil;
16540     return Qnil;
16541 }
16542 
16543 /*
16544  *  call-seq:
16545  *    ripper#parse
16546  *
16547  *  Start parsing and returns the value of the root action.
16548  */
16549 static VALUE
16550 ripper_parse(VALUE self)
16551 {
16552     struct parser_params *parser;
16553 
16554     TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16555     if (!ripper_initialized_p(parser)) {
16556         rb_raise(rb_eArgError, "method called for uninitialized object");
16557     }
16558     if (!NIL_P(parser->parsing_thread)) {
16559         if (parser->parsing_thread == rb_thread_current())
16560             rb_raise(rb_eArgError, "Ripper#parse is not reentrant");
16561         else
16562             rb_raise(rb_eArgError, "Ripper#parse is not multithread-safe");
16563     }
16564     parser->parsing_thread = rb_thread_current();
16565     rb_ensure(ripper_parse0, self, ripper_ensure, self);
16566 
16567     return parser->result;
16568 }
16569 
16570 /*
16571  *  call-seq:
16572  *    ripper#column   -> Integer
16573  *
16574  *  Return column number of current parsing line.
16575  *  This number starts from 0.
16576  */
16577 static VALUE
16578 ripper_column(VALUE self)
16579 {
16580     struct parser_params *parser;
16581     long col;
16582 
16583     TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16584     if (!ripper_initialized_p(parser)) {
16585         rb_raise(rb_eArgError, "method called for uninitialized object");
16586     }
16587     if (NIL_P(parser->parsing_thread)) return Qnil;
16588     col = parser->tokp - parser->parser_lex_pbeg;
16589     return LONG2NUM(col);
16590 }
16591 
16592 /*
16593  *  call-seq:
16594  *    ripper#filename   -> String
16595  *
16596  *  Return current parsing filename.
16597  */
16598 static VALUE
16599 ripper_filename(VALUE self)
16600 {
16601     struct parser_params *parser;
16602 
16603     TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16604     if (!ripper_initialized_p(parser)) {
16605         rb_raise(rb_eArgError, "method called for uninitialized object");
16606     }
16607     return parser->parser_ruby_sourcefile_string;
16608 }
16609 
16610 /*
16611  *  call-seq:
16612  *    ripper#lineno   -> Integer
16613  *
16614  *  Return line number of current parsing line.
16615  *  This number starts from 1.
16616  */
16617 static VALUE
16618 ripper_lineno(VALUE self)
16619 {
16620     struct parser_params *parser;
16621 
16622     TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16623     if (!ripper_initialized_p(parser)) {
16624         rb_raise(rb_eArgError, "method called for uninitialized object");
16625     }
16626     if (NIL_P(parser->parsing_thread)) return Qnil;
16627     return INT2NUM(parser->parser_ruby_sourceline);
16628 }
16629 
16630 #ifdef RIPPER_DEBUG
16631 /* :nodoc: */
16632 static VALUE
16633 ripper_assert_Qundef(VALUE self, VALUE obj, VALUE msg)
16634 {
16635     StringValue(msg);
16636     if (obj == Qundef) {
16637         rb_raise(rb_eArgError, "%s", RSTRING_PTR(msg));
16638     }
16639     return Qnil;
16640 }
16641 
16642 /* :nodoc: */
16643 static VALUE
16644 ripper_value(VALUE self, VALUE obj)
16645 {
16646     return ULONG2NUM(obj);
16647 }
16648 #endif
16649 
16650 void
16651 Init_ripper(void)
16652 {
16653     VALUE Ripper;
16654 
16655     Ripper = rb_define_class("Ripper", rb_cObject);
16656     rb_define_const(Ripper, "Version", rb_usascii_str_new2(RIPPER_VERSION));
16657     rb_define_alloc_func(Ripper, ripper_s_allocate);
16658     rb_define_method(Ripper, "initialize", ripper_initialize, -1);
16659     rb_define_method(Ripper, "parse", ripper_parse, 0);
16660     rb_define_method(Ripper, "column", ripper_column, 0);
16661     rb_define_method(Ripper, "filename", ripper_filename, 0);
16662     rb_define_method(Ripper, "lineno", ripper_lineno, 0);
16663     rb_define_method(Ripper, "end_seen?", rb_parser_end_seen_p, 0);
16664     rb_define_method(Ripper, "encoding", rb_parser_encoding, 0);
16665     rb_define_method(Ripper, "yydebug", rb_parser_get_yydebug, 0);
16666     rb_define_method(Ripper, "yydebug=", rb_parser_set_yydebug, 1);
16667 #ifdef RIPPER_DEBUG
16668     rb_define_method(rb_mKernel, "assert_Qundef", ripper_assert_Qundef, 2);
16669     rb_define_method(rb_mKernel, "rawVALUE", ripper_value, 1);
16670     rb_define_method(rb_mKernel, "validate_object", ripper_validate_object, 1);
16671 #endif
16672 
16673     ripper_id_gets = rb_intern("gets");
16674     ripper_init_eventids1(Ripper);
16675     ripper_init_eventids2(Ripper);
16676     /* ensure existing in symbol table */
16677     rb_intern("||");
16678     rb_intern("&&");
16679 }
16680 #endif /* RIPPER */
16681 
16682 

Generated on Wed Sep 8 2010 09:56:06 for Ruby by  doxygen 1.7.1