parse.c

Go to the documentation of this file.
00001 /* A Bison parser, made by GNU Bison 2.5.  */
00002 
00003 /* Bison implementation for Yacc-like parsers in C
00004    
00005       Copyright (C) 1984, 1989-1990, 2000-2011 Free Software Foundation, Inc.
00006    
00007    This program is free software: you can redistribute it and/or modify
00008    it under the terms of the GNU General Public License as published by
00009    the Free Software Foundation, either version 3 of the License, or
00010    (at your option) any later version.
00011    
00012    This program is distributed in the hope that it will be useful,
00013    but WITHOUT ANY WARRANTY; without even the implied warranty of
00014    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00015    GNU General Public License for more details.
00016    
00017    You should have received a copy of the GNU General Public License
00018    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
00019 
00020 /* As a special exception, you may create a larger work that contains
00021    part or all of the Bison parser skeleton and distribute that work
00022    under terms of your choice, so long as that work isn't itself a
00023    parser generator using the skeleton or a modified version thereof
00024    as a parser skeleton.  Alternatively, if you modify or redistribute
00025    the parser skeleton itself, you may (at your option) remove this
00026    special exception, which will cause the skeleton and the resulting
00027    Bison output files to be licensed under the GNU General Public
00028    License without this special exception.
00029    
00030    This special exception was added by the Free Software Foundation in
00031    version 2.2 of Bison.  */
00032 
00033 /* C LALR(1) parser skeleton written by Richard Stallman, by
00034    simplifying the original so-called "semantic" parser.  */
00035 
00036 /* All symbols defined below should begin with yy or YY, to avoid
00037    infringing on user name space.  This should be done even for local
00038    variables, as they might otherwise be expanded by user macros.
00039    There are some unavoidable exceptions within include files to
00040    define necessary library symbols; they are noted "INFRINGES ON
00041    USER NAME SPACE" below.  */
00042 
00043 /* Identify Bison output.  */
00044 #define YYBISON 1
00045 
00046 /* Bison version.  */
00047 #define YYBISON_VERSION "2.5"
00048 
00049 /* Skeleton name.  */
00050 #define YYSKELETON_NAME "yacc.c"
00051 
00052 /* Pure parsers.  */
00053 #define YYPURE 1
00054 
00055 /* Push parsers.  */
00056 #define YYPUSH 0
00057 
00058 /* Pull parsers.  */
00059 #define YYPULL 1
00060 
00061 /* Using locations.  */
00062 #define YYLSP_NEEDED 0
00063 
00064 
00065 
00066 /* Copy the first part of user declarations.  */
00067 
00068 /* Line 268 of yacc.c  */
00069 #line 12 "parse.y"
00070 
00071 
00072 #ifndef PARSER_DEBUG
00073 #define PARSER_DEBUG 0
00074 #endif
00075 #define YYDEBUG 1
00076 #define YYERROR_VERBOSE 1
00077 #define YYSTACK_USE_ALLOCA 0
00078 
00079 #include "ruby/ruby.h"
00080 #include "ruby/st.h"
00081 #include "ruby/encoding.h"
00082 #include "internal.h"
00083 #include "node.h"
00084 #include "parse.h"
00085 #include "id.h"
00086 #include "regenc.h"
00087 #include <stdio.h>
00088 #include <errno.h>
00089 #include <ctype.h>
00090 #include "probes.h"
00091 
00092 #define YYMALLOC(size)          rb_parser_malloc(parser, (size))
00093 #define YYREALLOC(ptr, size)    rb_parser_realloc(parser, (ptr), (size))
00094 #define YYCALLOC(nelem, size)   rb_parser_calloc(parser, (nelem), (size))
00095 #define YYFREE(ptr)             rb_parser_free(parser, (ptr))
00096 #define malloc  YYMALLOC
00097 #define realloc YYREALLOC
00098 #define calloc  YYCALLOC
00099 #define free    YYFREE
00100 
00101 #ifndef RIPPER
00102 static ID register_symid(ID, const char *, long, rb_encoding *);
00103 static ID register_symid_str(ID, VALUE);
00104 #define REGISTER_SYMID(id, name) register_symid((id), (name), strlen(name), enc)
00105 #include "id.c"
00106 #endif
00107 
00108 #define is_notop_id(id) ((id)>tLAST_OP_ID)
00109 #define is_local_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_LOCAL)
00110 #define is_global_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_GLOBAL)
00111 #define is_instance_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_INSTANCE)
00112 #define is_attrset_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_ATTRSET)
00113 #define is_const_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_CONST)
00114 #define is_class_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_CLASS)
00115 #define is_junk_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_JUNK)
00116 #define id_type(id) (is_notop_id(id) ? (int)((id)&ID_SCOPE_MASK) : -1)
00117 
00118 #define is_asgn_or_id(id) ((is_notop_id(id)) && \
00119         (((id)&ID_SCOPE_MASK) == ID_GLOBAL || \
00120          ((id)&ID_SCOPE_MASK) == ID_INSTANCE || \
00121          ((id)&ID_SCOPE_MASK) == ID_CLASS))
00122 
00123 enum lex_state_bits {
00124     EXPR_BEG_bit,               /* ignore newline, +/- is a sign. */
00125     EXPR_END_bit,               /* newline significant, +/- is an operator. */
00126     EXPR_ENDARG_bit,            /* ditto, and unbound braces. */
00127     EXPR_ENDFN_bit,             /* ditto, and unbound braces. */
00128     EXPR_ARG_bit,               /* newline significant, +/- is an operator. */
00129     EXPR_CMDARG_bit,            /* newline significant, +/- is an operator. */
00130     EXPR_MID_bit,               /* newline significant, +/- is an operator. */
00131     EXPR_FNAME_bit,             /* ignore newline, no reserved words. */
00132     EXPR_DOT_bit,               /* right after `.' or `::', no reserved words. */
00133     EXPR_CLASS_bit,             /* immediate after `class', no here document. */
00134     EXPR_VALUE_bit,             /* alike EXPR_BEG but label is disallowed. */
00135     EXPR_LABELARG_bit,          /* ignore significant, +/- is a sign. */
00136     EXPR_MAX_STATE
00137 };
00138 /* examine combinations */
00139 enum lex_state_e {
00140 #define DEF_EXPR(n) EXPR_##n = (1 << EXPR_##n##_bit)
00141     DEF_EXPR(BEG),
00142     DEF_EXPR(END),
00143     DEF_EXPR(ENDARG),
00144     DEF_EXPR(ENDFN),
00145     DEF_EXPR(ARG),
00146     DEF_EXPR(CMDARG),
00147     DEF_EXPR(MID),
00148     DEF_EXPR(FNAME),
00149     DEF_EXPR(DOT),
00150     DEF_EXPR(CLASS),
00151     DEF_EXPR(VALUE),
00152     DEF_EXPR(LABELARG),
00153     EXPR_BEG_ANY  =  (EXPR_BEG | EXPR_VALUE | EXPR_MID | EXPR_CLASS | EXPR_LABELARG),
00154     EXPR_ARG_ANY  =  (EXPR_ARG | EXPR_CMDARG),
00155     EXPR_END_ANY  =  (EXPR_END | EXPR_ENDARG | EXPR_ENDFN)
00156 };
00157 #define IS_lex_state_for(x, ls) ((x) & (ls))
00158 #define IS_lex_state(ls)        IS_lex_state_for(lex_state, (ls))
00159 
00160 #if PARSER_DEBUG
00161 static const char *lex_state_name(enum lex_state_e state);
00162 #endif
00163 
00164 typedef VALUE stack_type;
00165 
00166 # define BITSTACK_PUSH(stack, n)        ((stack) = ((stack)<<1)|((n)&1))
00167 # define BITSTACK_POP(stack)    ((stack) = (stack) >> 1)
00168 # define BITSTACK_LEXPOP(stack) ((stack) = ((stack) >> 1) | ((stack) & 1))
00169 # define BITSTACK_SET_P(stack)  ((stack)&1)
00170 
00171 #define COND_PUSH(n)    BITSTACK_PUSH(cond_stack, (n))
00172 #define COND_POP()      BITSTACK_POP(cond_stack)
00173 #define COND_LEXPOP()   BITSTACK_LEXPOP(cond_stack)
00174 #define COND_P()        BITSTACK_SET_P(cond_stack)
00175 
00176 #define CMDARG_PUSH(n)  BITSTACK_PUSH(cmdarg_stack, (n))
00177 #define CMDARG_POP()    BITSTACK_POP(cmdarg_stack)
00178 #define CMDARG_LEXPOP() BITSTACK_LEXPOP(cmdarg_stack)
00179 #define CMDARG_P()      BITSTACK_SET_P(cmdarg_stack)
00180 
00181 struct vtable {
00182     ID *tbl;
00183     int pos;
00184     int capa;
00185     struct vtable *prev;
00186 };
00187 
00188 struct local_vars {
00189     struct vtable *args;
00190     struct vtable *vars;
00191     struct vtable *used;
00192     struct local_vars *prev;
00193     stack_type cmdargs;
00194 };
00195 
00196 #define DVARS_INHERIT ((void*)1)
00197 #define DVARS_TOPSCOPE NULL
00198 #define DVARS_SPECIAL_P(tbl) (!POINTER_P(tbl))
00199 #define POINTER_P(val) ((VALUE)(val) & ~(VALUE)3)
00200 
00201 static int
00202 vtable_size(const struct vtable *tbl)
00203 {
00204     if (POINTER_P(tbl)) {
00205         return tbl->pos;
00206     }
00207     else {
00208         return 0;
00209     }
00210 }
00211 
00212 #define VTBL_DEBUG 0
00213 
00214 static struct vtable *
00215 vtable_alloc(struct vtable *prev)
00216 {
00217     struct vtable *tbl = ALLOC(struct vtable);
00218     tbl->pos = 0;
00219     tbl->capa = 8;
00220     tbl->tbl = ALLOC_N(ID, tbl->capa);
00221     tbl->prev = prev;
00222     if (VTBL_DEBUG) printf("vtable_alloc: %p\n", (void *)tbl);
00223     return tbl;
00224 }
00225 
00226 static void
00227 vtable_free(struct vtable *tbl)
00228 {
00229     if (VTBL_DEBUG)printf("vtable_free: %p\n", (void *)tbl);
00230     if (POINTER_P(tbl)) {
00231         if (tbl->tbl) {
00232             xfree(tbl->tbl);
00233         }
00234         xfree(tbl);
00235     }
00236 }
00237 
00238 static void
00239 vtable_add(struct vtable *tbl, ID id)
00240 {
00241     if (!POINTER_P(tbl)) {
00242         rb_bug("vtable_add: vtable is not allocated (%p)", (void *)tbl);
00243     }
00244     if (VTBL_DEBUG) printf("vtable_add: %p, %s\n", (void *)tbl, rb_id2name(id));
00245 
00246     if (tbl->pos == tbl->capa) {
00247         tbl->capa = tbl->capa * 2;
00248         REALLOC_N(tbl->tbl, ID, tbl->capa);
00249     }
00250     tbl->tbl[tbl->pos++] = id;
00251 }
00252 
00253 static int
00254 vtable_included(const struct vtable * tbl, ID id)
00255 {
00256     int i;
00257 
00258     if (POINTER_P(tbl)) {
00259         for (i = 0; i < tbl->pos; i++) {
00260             if (tbl->tbl[i] == id) {
00261                 return i+1;
00262             }
00263         }
00264     }
00265     return 0;
00266 }
00267 
00268 
00269 #ifndef RIPPER
00270 typedef struct token_info {
00271     const char *token;
00272     int linenum;
00273     int column;
00274     int nonspc;
00275     struct token_info *next;
00276 } token_info;
00277 #endif
00278 
00279 /*
00280     Structure of Lexer Buffer:
00281 
00282  lex_pbeg      tokp         lex_p        lex_pend
00283     |           |              |            |
00284     |-----------+--------------+------------|
00285                 |<------------>|
00286                      token
00287 */
00288 struct parser_params {
00289     int is_ripper;
00290     NODE *heap;
00291 
00292     YYSTYPE *parser_yylval;
00293     VALUE eofp;
00294 
00295     NODE *parser_lex_strterm;
00296     enum lex_state_e parser_lex_state;
00297     stack_type parser_cond_stack;
00298     stack_type parser_cmdarg_stack;
00299     int parser_class_nest;
00300     int parser_paren_nest;
00301     int parser_lpar_beg;
00302     int parser_in_single;
00303     int parser_in_def;
00304     int parser_brace_nest;
00305     int parser_compile_for_eval;
00306     VALUE parser_cur_mid;
00307     int parser_in_kwarg;
00308     int parser_in_defined;
00309     char *parser_tokenbuf;
00310     int parser_tokidx;
00311     int parser_toksiz;
00312     int parser_tokline;
00313     VALUE parser_lex_input;
00314     VALUE parser_lex_lastline;
00315     VALUE parser_lex_nextline;
00316     const char *parser_lex_pbeg;
00317     const char *parser_lex_p;
00318     const char *parser_lex_pend;
00319     int parser_heredoc_end;
00320     int parser_command_start;
00321     NODE *parser_deferred_nodes;
00322     long parser_lex_gets_ptr;
00323     VALUE (*parser_lex_gets)(struct parser_params*,VALUE);
00324     struct local_vars *parser_lvtbl;
00325     int parser_ruby__end__seen;
00326     int line_count;
00327     int has_shebang;
00328     char *parser_ruby_sourcefile; /* current source file */
00329     int parser_ruby_sourceline; /* current line no. */
00330     VALUE parser_ruby_sourcefile_string;
00331     rb_encoding *enc;
00332 
00333     int parser_yydebug;
00334 
00335     int last_cr_line;
00336 
00337 #ifndef RIPPER
00338     /* Ruby core only */
00339     NODE *parser_eval_tree_begin;
00340     NODE *parser_eval_tree;
00341     VALUE debug_lines;
00342     VALUE coverage;
00343     int nerr;
00344 
00345     int parser_token_info_enabled;
00346     token_info *parser_token_info;
00347 #else
00348     /* Ripper only */
00349     const char *tokp;
00350     VALUE delayed;
00351     int delayed_line;
00352     int delayed_col;
00353 
00354     VALUE value;
00355     VALUE result;
00356     VALUE parsing_thread;
00357     int toplevel_p;
00358 #endif
00359 };
00360 
00361 #define STR_NEW(p,n) rb_enc_str_new((p),(n),current_enc)
00362 #define STR_NEW0() rb_enc_str_new(0,0,current_enc)
00363 #define STR_NEW2(p) rb_enc_str_new((p),strlen(p),current_enc)
00364 #define STR_NEW3(p,n,e,func) parser_str_new((p),(n),(e),(func),current_enc)
00365 #define ENC_SINGLE(cr) ((cr)==ENC_CODERANGE_7BIT)
00366 #define TOK_INTERN(mb) rb_intern3(tok(), toklen(), current_enc)
00367 
00368 static int parser_yyerror(struct parser_params*, const char*);
00369 #define yyerror(msg) parser_yyerror(parser, (msg))
00370 
00371 #define lex_strterm             (parser->parser_lex_strterm)
00372 #define lex_state               (parser->parser_lex_state)
00373 #define cond_stack              (parser->parser_cond_stack)
00374 #define cmdarg_stack            (parser->parser_cmdarg_stack)
00375 #define class_nest              (parser->parser_class_nest)
00376 #define paren_nest              (parser->parser_paren_nest)
00377 #define lpar_beg                (parser->parser_lpar_beg)
00378 #define brace_nest              (parser->parser_brace_nest)
00379 #define in_single               (parser->parser_in_single)
00380 #define in_def                  (parser->parser_in_def)
00381 #define compile_for_eval        (parser->parser_compile_for_eval)
00382 #define cur_mid                 (parser->parser_cur_mid)
00383 #define in_defined              (parser->parser_in_defined)
00384 #define tokenbuf                (parser->parser_tokenbuf)
00385 #define tokidx                  (parser->parser_tokidx)
00386 #define toksiz                  (parser->parser_toksiz)
00387 #define tokline                 (parser->parser_tokline)
00388 #define lex_input               (parser->parser_lex_input)
00389 #define lex_lastline            (parser->parser_lex_lastline)
00390 #define lex_nextline            (parser->parser_lex_nextline)
00391 #define lex_pbeg                (parser->parser_lex_pbeg)
00392 #define lex_p                   (parser->parser_lex_p)
00393 #define lex_pend                (parser->parser_lex_pend)
00394 #define heredoc_end             (parser->parser_heredoc_end)
00395 #define command_start           (parser->parser_command_start)
00396 #define deferred_nodes          (parser->parser_deferred_nodes)
00397 #define lex_gets_ptr            (parser->parser_lex_gets_ptr)
00398 #define lex_gets                (parser->parser_lex_gets)
00399 #define lvtbl                   (parser->parser_lvtbl)
00400 #define ruby__end__seen         (parser->parser_ruby__end__seen)
00401 #define ruby_sourceline         (parser->parser_ruby_sourceline)
00402 #define ruby_sourcefile         (parser->parser_ruby_sourcefile)
00403 #define ruby_sourcefile_string  (parser->parser_ruby_sourcefile_string)
00404 #define current_enc             (parser->enc)
00405 #define yydebug                 (parser->parser_yydebug)
00406 #ifdef RIPPER
00407 #else
00408 #define ruby_eval_tree          (parser->parser_eval_tree)
00409 #define ruby_eval_tree_begin    (parser->parser_eval_tree_begin)
00410 #define ruby_debug_lines        (parser->debug_lines)
00411 #define ruby_coverage           (parser->coverage)
00412 #endif
00413 
00414 #if YYPURE
00415 static int yylex(void*, void*);
00416 #else
00417 static int yylex(void*);
00418 #endif
00419 
00420 #ifndef RIPPER
00421 #define yyparse ruby_yyparse
00422 
00423 static NODE* node_newnode(struct parser_params *, enum node_type, VALUE, VALUE, VALUE);
00424 #define rb_node_newnode(type, a1, a2, a3) node_newnode(parser, (type), (a1), (a2), (a3))
00425 
00426 static NODE *cond_gen(struct parser_params*,NODE*);
00427 #define cond(node) cond_gen(parser, (node))
00428 static NODE *logop_gen(struct parser_params*,enum node_type,NODE*,NODE*);
00429 #define logop(type,node1,node2) logop_gen(parser, (type), (node1), (node2))
00430 
00431 static NODE *newline_node(NODE*);
00432 static void fixpos(NODE*,NODE*);
00433 
00434 static int value_expr_gen(struct parser_params*,NODE*);
00435 static void void_expr_gen(struct parser_params*,NODE*);
00436 static NODE *remove_begin(NODE*);
00437 static NODE *remove_begin_all(NODE*);
00438 #define value_expr(node) value_expr_gen(parser, (node) = remove_begin(node))
00439 #define void_expr0(node) void_expr_gen(parser, (node))
00440 #define void_expr(node) void_expr0((node) = remove_begin(node))
00441 static void void_stmts_gen(struct parser_params*,NODE*);
00442 #define void_stmts(node) void_stmts_gen(parser, (node))
00443 static void reduce_nodes_gen(struct parser_params*,NODE**);
00444 #define reduce_nodes(n) reduce_nodes_gen(parser,(n))
00445 static void block_dup_check_gen(struct parser_params*,NODE*,NODE*);
00446 #define block_dup_check(n1,n2) block_dup_check_gen(parser,(n1),(n2))
00447 
00448 static NODE *block_append_gen(struct parser_params*,NODE*,NODE*);
00449 #define block_append(h,t) block_append_gen(parser,(h),(t))
00450 static NODE *list_append_gen(struct parser_params*,NODE*,NODE*);
00451 #define list_append(l,i) list_append_gen(parser,(l),(i))
00452 static NODE *list_concat_gen(struct parser_params*,NODE*,NODE*);
00453 #define list_concat(h,t) list_concat_gen(parser,(h),(t))
00454 static NODE *arg_append_gen(struct parser_params*,NODE*,NODE*);
00455 #define arg_append(h,t) arg_append_gen(parser,(h),(t))
00456 static NODE *arg_concat_gen(struct parser_params*,NODE*,NODE*);
00457 #define arg_concat(h,t) arg_concat_gen(parser,(h),(t))
00458 static NODE *literal_concat_gen(struct parser_params*,NODE*,NODE*);
00459 #define literal_concat(h,t) literal_concat_gen(parser,(h),(t))
00460 static int literal_concat0(struct parser_params *, VALUE, VALUE);
00461 static NODE *new_evstr_gen(struct parser_params*,NODE*);
00462 #define new_evstr(n) new_evstr_gen(parser,(n))
00463 static NODE *evstr2dstr_gen(struct parser_params*,NODE*);
00464 #define evstr2dstr(n) evstr2dstr_gen(parser,(n))
00465 static NODE *splat_array(NODE*);
00466 
00467 static NODE *call_bin_op_gen(struct parser_params*,NODE*,ID,NODE*);
00468 #define call_bin_op(recv,id,arg1) call_bin_op_gen(parser, (recv),(id),(arg1))
00469 static NODE *call_uni_op_gen(struct parser_params*,NODE*,ID);
00470 #define call_uni_op(recv,id) call_uni_op_gen(parser, (recv),(id))
00471 
00472 static NODE *new_args_gen(struct parser_params*,NODE*,NODE*,ID,NODE*,NODE*);
00473 #define new_args(f,o,r,p,t) new_args_gen(parser, (f),(o),(r),(p),(t))
00474 static NODE *new_args_tail_gen(struct parser_params*,NODE*,ID,ID);
00475 #define new_args_tail(k,kr,b) new_args_tail_gen(parser, (k),(kr),(b))
00476 
00477 static NODE *negate_lit(NODE*);
00478 static NODE *ret_args_gen(struct parser_params*,NODE*);
00479 #define ret_args(node) ret_args_gen(parser, (node))
00480 static NODE *arg_blk_pass(NODE*,NODE*);
00481 static NODE *new_yield_gen(struct parser_params*,NODE*);
00482 #define new_yield(node) new_yield_gen(parser, (node))
00483 static NODE *dsym_node_gen(struct parser_params*,NODE*);
00484 #define dsym_node(node) dsym_node_gen(parser, (node))
00485 
00486 static NODE *gettable_gen(struct parser_params*,ID);
00487 #define gettable(id) gettable_gen(parser,(id))
00488 static NODE *assignable_gen(struct parser_params*,ID,NODE*);
00489 #define assignable(id,node) assignable_gen(parser, (id), (node))
00490 
00491 static NODE *aryset_gen(struct parser_params*,NODE*,NODE*);
00492 #define aryset(node1,node2) aryset_gen(parser, (node1), (node2))
00493 static NODE *attrset_gen(struct parser_params*,NODE*,ID);
00494 #define attrset(node,id) attrset_gen(parser, (node), (id))
00495 
00496 static void rb_backref_error_gen(struct parser_params*,NODE*);
00497 #define rb_backref_error(n) rb_backref_error_gen(parser,(n))
00498 static NODE *node_assign_gen(struct parser_params*,NODE*,NODE*);
00499 #define node_assign(node1, node2) node_assign_gen(parser, (node1), (node2))
00500 
00501 static NODE *new_op_assign_gen(struct parser_params *parser, NODE *lhs, ID op, NODE *rhs);
00502 static NODE *new_attr_op_assign_gen(struct parser_params *parser, NODE *lhs, ID attr, ID op, NODE *rhs);
00503 #define new_attr_op_assign(lhs, type, attr, op, rhs) new_attr_op_assign_gen(parser, (lhs), (attr), (op), (rhs))
00504 static NODE *new_const_op_assign_gen(struct parser_params *parser, NODE *lhs, ID op, NODE *rhs);
00505 #define new_const_op_assign(lhs, op, rhs) new_const_op_assign_gen(parser, (lhs), (op), (rhs))
00506 
00507 #define new_defined(expr) NEW_DEFINED(remove_begin_all(expr))
00508 
00509 static NODE *match_op_gen(struct parser_params*,NODE*,NODE*);
00510 #define match_op(node1,node2) match_op_gen(parser, (node1), (node2))
00511 
00512 static ID  *local_tbl_gen(struct parser_params*);
00513 #define local_tbl() local_tbl_gen(parser)
00514 
00515 static void fixup_nodes(NODE **);
00516 
00517 static VALUE reg_compile_gen(struct parser_params*, VALUE, int);
00518 #define reg_compile(str,options) reg_compile_gen(parser, (str), (options))
00519 static void reg_fragment_setenc_gen(struct parser_params*, VALUE, int);
00520 #define reg_fragment_setenc(str,options) reg_fragment_setenc_gen(parser, (str), (options))
00521 static int reg_fragment_check_gen(struct parser_params*, VALUE, int);
00522 #define reg_fragment_check(str,options) reg_fragment_check_gen(parser, (str), (options))
00523 static NODE *reg_named_capture_assign_gen(struct parser_params* parser, VALUE regexp, NODE *match);
00524 #define reg_named_capture_assign(regexp,match) reg_named_capture_assign_gen(parser,(regexp),(match))
00525 
00526 #define get_id(id) (id)
00527 #define get_value(val) (val)
00528 #else
00529 #define value_expr(node) ((void)(node))
00530 #define remove_begin(node) (node)
00531 #define rb_dvar_defined(id) 0
00532 #define rb_local_defined(id) 0
00533 static ID ripper_get_id(VALUE);
00534 #define get_id(id) ripper_get_id(id)
00535 static VALUE ripper_get_value(VALUE);
00536 #define get_value(val) ripper_get_value(val)
00537 static VALUE assignable_gen(struct parser_params*,VALUE);
00538 #define assignable(lhs,node) assignable_gen(parser, (lhs))
00539 static int id_is_var_gen(struct parser_params *parser, ID id);
00540 #define id_is_var(id) id_is_var_gen(parser, (id))
00541 
00542 #define node_assign(node1, node2) dispatch2(assign, (node1), (node2))
00543 
00544 static VALUE new_op_assign_gen(struct parser_params *parser, VALUE lhs, VALUE op, VALUE rhs);
00545 static VALUE new_attr_op_assign_gen(struct parser_params *parser, VALUE lhs, VALUE type, VALUE attr, VALUE op, VALUE rhs);
00546 #define new_attr_op_assign(lhs, type, attr, op, rhs) new_attr_op_assign_gen(parser, (lhs), (type), (attr), (op), (rhs))
00547 
00548 #endif /* !RIPPER */
00549 
00550 #define new_op_assign(lhs, op, rhs) new_op_assign_gen(parser, (lhs), (op), (rhs))
00551 
00552 static ID formal_argument_gen(struct parser_params*, ID);
00553 #define formal_argument(id) formal_argument_gen(parser, (id))
00554 static ID shadowing_lvar_gen(struct parser_params*,ID);
00555 #define shadowing_lvar(name) shadowing_lvar_gen(parser, (name))
00556 static void new_bv_gen(struct parser_params*,ID);
00557 #define new_bv(id) new_bv_gen(parser, (id))
00558 
00559 static void local_push_gen(struct parser_params*,int);
00560 #define local_push(top) local_push_gen(parser,(top))
00561 static void local_pop_gen(struct parser_params*);
00562 #define local_pop() local_pop_gen(parser)
00563 static int local_var_gen(struct parser_params*, ID);
00564 #define local_var(id) local_var_gen(parser, (id))
00565 static int arg_var_gen(struct parser_params*, ID);
00566 #define arg_var(id) arg_var_gen(parser, (id))
00567 static int  local_id_gen(struct parser_params*, ID);
00568 #define local_id(id) local_id_gen(parser, (id))
00569 static ID   internal_id_gen(struct parser_params*);
00570 #define internal_id() internal_id_gen(parser)
00571 
00572 static const struct vtable *dyna_push_gen(struct parser_params *);
00573 #define dyna_push() dyna_push_gen(parser)
00574 static void dyna_pop_gen(struct parser_params*, const struct vtable *);
00575 #define dyna_pop(node) dyna_pop_gen(parser, (node))
00576 static int dyna_in_block_gen(struct parser_params*);
00577 #define dyna_in_block() dyna_in_block_gen(parser)
00578 #define dyna_var(id) local_var(id)
00579 static int dvar_defined_gen(struct parser_params*,ID,int);
00580 #define dvar_defined(id) dvar_defined_gen(parser, (id), 0)
00581 #define dvar_defined_get(id) dvar_defined_gen(parser, (id), 1)
00582 static int dvar_curr_gen(struct parser_params*,ID);
00583 #define dvar_curr(id) dvar_curr_gen(parser, (id))
00584 
00585 static int lvar_defined_gen(struct parser_params*, ID);
00586 #define lvar_defined(id) lvar_defined_gen(parser, (id))
00587 
00588 #define RE_OPTION_ONCE (1<<16)
00589 #define RE_OPTION_ENCODING_SHIFT 8
00590 #define RE_OPTION_ENCODING(e) (((e)&0xff)<<RE_OPTION_ENCODING_SHIFT)
00591 #define RE_OPTION_ENCODING_IDX(o) (((o)>>RE_OPTION_ENCODING_SHIFT)&0xff)
00592 #define RE_OPTION_ENCODING_NONE(o) ((o)&RE_OPTION_ARG_ENCODING_NONE)
00593 #define RE_OPTION_MASK  0xff
00594 #define RE_OPTION_ARG_ENCODING_NONE 32
00595 
00596 #define NODE_STRTERM NODE_ZARRAY        /* nothing to gc */
00597 #define NODE_HEREDOC NODE_ARRAY         /* 1, 3 to gc */
00598 #define SIGN_EXTEND(x,n) (((1<<(n)-1)^((x)&~(~0<<(n))))-(1<<(n)-1))
00599 #define nd_func u1.id
00600 #if SIZEOF_SHORT == 2
00601 #define nd_term(node) ((signed short)(node)->u2.id)
00602 #else
00603 #define nd_term(node) SIGN_EXTEND((node)->u2.id, CHAR_BIT*2)
00604 #endif
00605 #define nd_paren(node) (char)((node)->u2.id >> CHAR_BIT*2)
00606 #define nd_nest u3.cnt
00607 
00608 /****** Ripper *******/
00609 
00610 #ifdef RIPPER
00611 #define RIPPER_VERSION "0.1.0"
00612 
00613 #include "eventids1.c"
00614 #include "eventids2.c"
00615 
00616 static VALUE ripper_dispatch0(struct parser_params*,ID);
00617 static VALUE ripper_dispatch1(struct parser_params*,ID,VALUE);
00618 static VALUE ripper_dispatch2(struct parser_params*,ID,VALUE,VALUE);
00619 static VALUE ripper_dispatch3(struct parser_params*,ID,VALUE,VALUE,VALUE);
00620 static VALUE ripper_dispatch4(struct parser_params*,ID,VALUE,VALUE,VALUE,VALUE);
00621 static VALUE ripper_dispatch5(struct parser_params*,ID,VALUE,VALUE,VALUE,VALUE,VALUE);
00622 static VALUE ripper_dispatch7(struct parser_params*,ID,VALUE,VALUE,VALUE,VALUE,VALUE,VALUE,VALUE);
00623 
00624 #define dispatch0(n)            ripper_dispatch0(parser, TOKEN_PASTE(ripper_id_, n))
00625 #define dispatch1(n,a)          ripper_dispatch1(parser, TOKEN_PASTE(ripper_id_, n), (a))
00626 #define dispatch2(n,a,b)        ripper_dispatch2(parser, TOKEN_PASTE(ripper_id_, n), (a), (b))
00627 #define dispatch3(n,a,b,c)      ripper_dispatch3(parser, TOKEN_PASTE(ripper_id_, n), (a), (b), (c))
00628 #define dispatch4(n,a,b,c,d)    ripper_dispatch4(parser, TOKEN_PASTE(ripper_id_, n), (a), (b), (c), (d))
00629 #define dispatch5(n,a,b,c,d,e)  ripper_dispatch5(parser, TOKEN_PASTE(ripper_id_, n), (a), (b), (c), (d), (e))
00630 #define dispatch7(n,a,b,c,d,e,f,g) ripper_dispatch7(parser, TOKEN_PASTE(ripper_id_, n), (a), (b), (c), (d), (e), (f), (g))
00631 
00632 #define yyparse ripper_yyparse
00633 
00634 #define ripper_intern(s) ID2SYM(rb_intern(s))
00635 static VALUE ripper_id2sym(ID);
00636 #ifdef __GNUC__
00637 #define ripper_id2sym(id) ((id) < 256 && rb_ispunct(id) ? \
00638                            ID2SYM(id) : ripper_id2sym(id))
00639 #endif
00640 
00641 #define arg_new() dispatch0(args_new)
00642 #define arg_add(l,a) dispatch2(args_add, (l), (a))
00643 #define arg_add_star(l,a) dispatch2(args_add_star, (l), (a))
00644 #define arg_add_block(l,b) dispatch2(args_add_block, (l), (b))
00645 #define arg_add_optblock(l,b) ((b)==Qundef? (l) : dispatch2(args_add_block, (l), (b)))
00646 #define bare_assoc(v) dispatch1(bare_assoc_hash, (v))
00647 #define arg_add_assocs(l,b) arg_add((l), bare_assoc(b))
00648 
00649 #define args2mrhs(a) dispatch1(mrhs_new_from_args, (a))
00650 #define mrhs_new() dispatch0(mrhs_new)
00651 #define mrhs_add(l,a) dispatch2(mrhs_add, (l), (a))
00652 #define mrhs_add_star(l,a) dispatch2(mrhs_add_star, (l), (a))
00653 
00654 #define mlhs_new() dispatch0(mlhs_new)
00655 #define mlhs_add(l,a) dispatch2(mlhs_add, (l), (a))
00656 #define mlhs_add_star(l,a) dispatch2(mlhs_add_star, (l), (a))
00657 
00658 #define params_new(pars, opts, rest, pars2, kws, kwrest, blk) \
00659         dispatch7(params, (pars), (opts), (rest), (pars2), (kws), (kwrest), (blk))
00660 
00661 #define blockvar_new(p,v) dispatch2(block_var, (p), (v))
00662 #define blockvar_add_star(l,a) dispatch2(block_var_add_star, (l), (a))
00663 #define blockvar_add_block(l,a) dispatch2(block_var_add_block, (l), (a))
00664 
00665 #define method_optarg(m,a) ((a)==Qundef ? (m) : dispatch2(method_add_arg,(m),(a)))
00666 #define method_arg(m,a) dispatch2(method_add_arg,(m),(a))
00667 #define method_add_block(m,b) dispatch2(method_add_block, (m), (b))
00668 
00669 #define escape_Qundef(x) ((x)==Qundef ? Qnil : (x))
00670 
00671 static inline VALUE
00672 new_args_gen(struct parser_params *parser, VALUE f, VALUE o, VALUE r, VALUE p, VALUE tail)
00673 {
00674     NODE *t = (NODE *)tail;
00675     VALUE k = t->u1.value, kr = t->u2.value, b = t->u3.value;
00676     return params_new(f, o, r, p, k, kr, escape_Qundef(b));
00677 }
00678 #define new_args(f,o,r,p,t) new_args_gen(parser, (f),(o),(r),(p),(t))
00679 
00680 static inline VALUE
00681 new_args_tail_gen(struct parser_params *parser, VALUE k, VALUE kr, VALUE b)
00682 {
00683     return (VALUE)rb_node_newnode(NODE_MEMO, k, kr, b);
00684 }
00685 #define new_args_tail(k,kr,b) new_args_tail_gen(parser, (k),(kr),(b))
00686 
00687 #define new_defined(expr) dispatch1(defined, (expr))
00688 
00689 #define FIXME 0
00690 
00691 #endif /* RIPPER */
00692 
00693 #ifndef RIPPER
00694 # define Qnone 0
00695 # define ifndef_ripper(x) (x)
00696 #else
00697 # define Qnone Qnil
00698 # define ifndef_ripper(x)
00699 #endif
00700 
00701 #ifndef RIPPER
00702 # define rb_warn0(fmt)    rb_compile_warn(ruby_sourcefile, ruby_sourceline, (fmt))
00703 # define rb_warnI(fmt,a)  rb_compile_warn(ruby_sourcefile, ruby_sourceline, (fmt), (a))
00704 # define rb_warnS(fmt,a)  rb_compile_warn(ruby_sourcefile, ruby_sourceline, (fmt), (a))
00705 # define rb_warn4S(file,line,fmt,a)  rb_compile_warn((file), (line), (fmt), (a))
00706 # define rb_warning0(fmt) rb_compile_warning(ruby_sourcefile, ruby_sourceline, (fmt))
00707 # define rb_warningS(fmt,a) rb_compile_warning(ruby_sourcefile, ruby_sourceline, (fmt), (a))
00708 #else
00709 # define rb_warn0(fmt)    ripper_warn0(parser, (fmt))
00710 # define rb_warnI(fmt,a)  ripper_warnI(parser, (fmt), (a))
00711 # define rb_warnS(fmt,a)  ripper_warnS(parser, (fmt), (a))
00712 # define rb_warn4S(file,line,fmt,a)  ripper_warnS(parser, (fmt), (a))
00713 # define rb_warning0(fmt) ripper_warning0(parser, (fmt))
00714 # define rb_warningS(fmt,a) ripper_warningS(parser, (fmt), (a))
00715 static void ripper_warn0(struct parser_params*, const char*);
00716 static void ripper_warnI(struct parser_params*, const char*, int);
00717 static void ripper_warnS(struct parser_params*, const char*, const char*);
00718 static void ripper_warning0(struct parser_params*, const char*);
00719 static void ripper_warningS(struct parser_params*, const char*, const char*);
00720 #endif
00721 
00722 #ifdef RIPPER
00723 static void ripper_compile_error(struct parser_params*, const char *fmt, ...);
00724 # define rb_compile_error ripper_compile_error
00725 # define compile_error ripper_compile_error
00726 # define PARSER_ARG parser,
00727 #else
00728 # define rb_compile_error rb_compile_error_with_enc
00729 # define compile_error parser->nerr++,rb_compile_error_with_enc
00730 # define PARSER_ARG ruby_sourcefile, ruby_sourceline, current_enc,
00731 #endif
00732 
00733 /* Older versions of Yacc set YYMAXDEPTH to a very low value by default (150,
00734    for instance).  This is too low for Ruby to parse some files, such as
00735    date/format.rb, therefore bump the value up to at least Bison's default. */
00736 #ifdef OLD_YACC
00737 #ifndef YYMAXDEPTH
00738 #define YYMAXDEPTH 10000
00739 #endif
00740 #endif
00741 
00742 #ifndef RIPPER
00743 static void token_info_push(struct parser_params*, const char *token);
00744 static void token_info_pop(struct parser_params*, const char *token);
00745 #define token_info_push(token) (RTEST(ruby_verbose) ? token_info_push(parser, (token)) : (void)0)
00746 #define token_info_pop(token) (RTEST(ruby_verbose) ? token_info_pop(parser, (token)) : (void)0)
00747 #else
00748 #define token_info_push(token) /* nothing */
00749 #define token_info_pop(token) /* nothing */
00750 #endif
00751 
00752 
00753 /* Line 268 of yacc.c  */
00754 #line 755 "parse.c"
00755 
00756 /* Enabling traces.  */
00757 #ifndef YYDEBUG
00758 # define YYDEBUG 0
00759 #endif
00760 
00761 /* Enabling verbose error messages.  */
00762 #ifdef YYERROR_VERBOSE
00763 # undef YYERROR_VERBOSE
00764 # define YYERROR_VERBOSE 1
00765 #else
00766 # define YYERROR_VERBOSE 0
00767 #endif
00768 
00769 /* Enabling the token table.  */
00770 #ifndef YYTOKEN_TABLE
00771 # define YYTOKEN_TABLE 0
00772 #endif
00773 
00774 
00775 /* Tokens.  */
00776 #ifndef YYTOKENTYPE
00777 # define YYTOKENTYPE
00778    /* Put the tokens into the symbol table, so that GDB and other debuggers
00779       know about them.  */
00780    enum yytokentype {
00781      END_OF_INPUT = 0,
00782      keyword_class = 258,
00783      keyword_module = 259,
00784      keyword_def = 260,
00785      keyword_undef = 261,
00786      keyword_begin = 262,
00787      keyword_rescue = 263,
00788      keyword_ensure = 264,
00789      keyword_end = 265,
00790      keyword_if = 266,
00791      keyword_unless = 267,
00792      keyword_then = 268,
00793      keyword_elsif = 269,
00794      keyword_else = 270,
00795      keyword_case = 271,
00796      keyword_when = 272,
00797      keyword_while = 273,
00798      keyword_until = 274,
00799      keyword_for = 275,
00800      keyword_break = 276,
00801      keyword_next = 277,
00802      keyword_redo = 278,
00803      keyword_retry = 279,
00804      keyword_in = 280,
00805      keyword_do = 281,
00806      keyword_do_cond = 282,
00807      keyword_do_block = 283,
00808      keyword_do_LAMBDA = 284,
00809      keyword_return = 285,
00810      keyword_yield = 286,
00811      keyword_super = 287,
00812      keyword_self = 288,
00813      keyword_nil = 289,
00814      keyword_true = 290,
00815      keyword_false = 291,
00816      keyword_and = 292,
00817      keyword_or = 293,
00818      keyword_not = 294,
00819      modifier_if = 295,
00820      modifier_unless = 296,
00821      modifier_while = 297,
00822      modifier_until = 298,
00823      modifier_rescue = 299,
00824      keyword_alias = 300,
00825      keyword_defined = 301,
00826      keyword_BEGIN = 302,
00827      keyword_END = 303,
00828      keyword__LINE__ = 304,
00829      keyword__FILE__ = 305,
00830      keyword__ENCODING__ = 306,
00831      tIDENTIFIER = 307,
00832      tFID = 308,
00833      tGVAR = 309,
00834      tIVAR = 310,
00835      tCONSTANT = 311,
00836      tCVAR = 312,
00837      tLABEL = 313,
00838      tINTEGER = 314,
00839      tFLOAT = 315,
00840      tRATIONAL = 316,
00841      tIMAGINARY = 317,
00842      tSTRING_CONTENT = 318,
00843      tCHAR = 319,
00844      tNTH_REF = 320,
00845      tBACK_REF = 321,
00846      tREGEXP_END = 322,
00847      tUPLUS = 130,
00848      tUMINUS = 131,
00849      tPOW = 132,
00850      tCMP = 134,
00851      tEQ = 139,
00852      tEQQ = 140,
00853      tNEQ = 141,
00854      tGEQ = 138,
00855      tLEQ = 137,
00856      tANDOP = 323,
00857      tOROP = 324,
00858      tMATCH = 142,
00859      tNMATCH = 143,
00860      tDOT2 = 128,
00861      tDOT3 = 129,
00862      tAREF = 144,
00863      tASET = 145,
00864      tLSHFT = 135,
00865      tRSHFT = 136,
00866      tCOLON2 = 325,
00867      tCOLON3 = 326,
00868      tOP_ASGN = 327,
00869      tASSOC = 328,
00870      tLPAREN = 329,
00871      tLPAREN_ARG = 330,
00872      tRPAREN = 331,
00873      tLBRACK = 332,
00874      tLBRACE = 333,
00875      tLBRACE_ARG = 334,
00876      tSTAR = 335,
00877      tDSTAR = 336,
00878      tAMPER = 337,
00879      tLAMBDA = 338,
00880      tSYMBEG = 339,
00881      tSTRING_BEG = 340,
00882      tXSTRING_BEG = 341,
00883      tREGEXP_BEG = 342,
00884      tWORDS_BEG = 343,
00885      tQWORDS_BEG = 344,
00886      tSYMBOLS_BEG = 345,
00887      tQSYMBOLS_BEG = 346,
00888      tSTRING_DBEG = 347,
00889      tSTRING_DEND = 348,
00890      tSTRING_DVAR = 349,
00891      tSTRING_END = 350,
00892      tLAMBEG = 351,
00893      tLOWEST = 352,
00894      tUMINUS_NUM = 353,
00895      tLAST_TOKEN = 354
00896    };
00897 #endif
00898 
00899 
00900 
00901 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
00902 typedef union YYSTYPE
00903 {
00904 
00905 /* Line 293 of yacc.c  */
00906 #line 699 "parse.y"
00907 
00908     VALUE val;
00909     NODE *node;
00910     ID id;
00911     int num;
00912     const struct vtable *vars;
00913 
00914 
00915 
00916 /* Line 293 of yacc.c  */
00917 #line 918 "parse.c"
00918 } YYSTYPE;
00919 # define YYSTYPE_IS_TRIVIAL 1
00920 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
00921 # define YYSTYPE_IS_DECLARED 1
00922 #endif
00923 
00924 
00925 /* Copy the second part of user declarations.  */
00926 
00927 
00928 /* Line 343 of yacc.c  */
00929 #line 930 "parse.c"
00930 
00931 #ifdef short
00932 # undef short
00933 #endif
00934 
00935 #ifdef YYTYPE_UINT8
00936 typedef YYTYPE_UINT8 yytype_uint8;
00937 #else
00938 typedef unsigned char yytype_uint8;
00939 #endif
00940 
00941 #ifdef YYTYPE_INT8
00942 typedef YYTYPE_INT8 yytype_int8;
00943 #elif (defined __STDC__ || defined __C99__FUNC__ \
00944      || defined __cplusplus || defined _MSC_VER)
00945 typedef signed char yytype_int8;
00946 #else
00947 typedef short int yytype_int8;
00948 #endif
00949 
00950 #ifdef YYTYPE_UINT16
00951 typedef YYTYPE_UINT16 yytype_uint16;
00952 #else
00953 typedef unsigned short int yytype_uint16;
00954 #endif
00955 
00956 #ifdef YYTYPE_INT16
00957 typedef YYTYPE_INT16 yytype_int16;
00958 #else
00959 typedef short int yytype_int16;
00960 #endif
00961 
00962 #ifndef YYSIZE_T
00963 # ifdef __SIZE_TYPE__
00964 #  define YYSIZE_T __SIZE_TYPE__
00965 # elif defined size_t
00966 #  define YYSIZE_T size_t
00967 # elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
00968      || defined __cplusplus || defined _MSC_VER)
00969 #  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
00970 #  define YYSIZE_T size_t
00971 # else
00972 #  define YYSIZE_T unsigned int
00973 # endif
00974 #endif
00975 
00976 #define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
00977 
00978 #ifndef YY_
00979 # if defined YYENABLE_NLS && YYENABLE_NLS
00980 #  if ENABLE_NLS
00981 #   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
00982 #   define YY_(msgid) dgettext ("bison-runtime", msgid)
00983 #  endif
00984 # endif
00985 # ifndef YY_
00986 #  define YY_(msgid) msgid
00987 # endif
00988 #endif
00989 
00990 /* Suppress unused-variable warnings by "using" E.  */
00991 #if ! defined lint || defined __GNUC__
00992 # define YYUSE(e) ((void) (e))
00993 #else
00994 # define YYUSE(e) /* empty */
00995 #endif
00996 
00997 /* Identity function, used to suppress warnings about constant conditions.  */
00998 #ifndef lint
00999 # define YYID(n) (n)
01000 #else
01001 #if (defined __STDC__ || defined __C99__FUNC__ \
01002      || defined __cplusplus || defined _MSC_VER)
01003 static int
01004 YYID (int yyi)
01005 #else
01006 static int
01007 YYID (yyi)
01008     int yyi;
01009 #endif
01010 {
01011   return yyi;
01012 }
01013 #endif
01014 
01015 #if ! defined yyoverflow || YYERROR_VERBOSE
01016 
01017 /* The parser invokes alloca or malloc; define the necessary symbols.  */
01018 
01019 # ifdef YYSTACK_USE_ALLOCA
01020 #  if YYSTACK_USE_ALLOCA
01021 #   ifdef __GNUC__
01022 #    define YYSTACK_ALLOC __builtin_alloca
01023 #   elif defined __BUILTIN_VA_ARG_INCR
01024 #    include <alloca.h> /* INFRINGES ON USER NAME SPACE */
01025 #   elif defined _AIX
01026 #    define YYSTACK_ALLOC __alloca
01027 #   elif defined _MSC_VER
01028 #    include <malloc.h> /* INFRINGES ON USER NAME SPACE */
01029 #    define alloca _alloca
01030 #   else
01031 #    define YYSTACK_ALLOC alloca
01032 #    if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
01033      || defined __cplusplus || defined _MSC_VER)
01034 #     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
01035 #     ifndef EXIT_SUCCESS
01036 #      define EXIT_SUCCESS 0
01037 #     endif
01038 #    endif
01039 #   endif
01040 #  endif
01041 # endif
01042 
01043 # ifdef YYSTACK_ALLOC
01044    /* Pacify GCC's `empty if-body' warning.  */
01045 #  define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
01046 #  ifndef YYSTACK_ALLOC_MAXIMUM
01047     /* The OS might guarantee only one guard page at the bottom of the stack,
01048        and a page size can be as small as 4096 bytes.  So we cannot safely
01049        invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
01050        to allow for a few compiler-allocated temporary stack slots.  */
01051 #   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
01052 #  endif
01053 # else
01054 #  define YYSTACK_ALLOC YYMALLOC
01055 #  define YYSTACK_FREE YYFREE
01056 #  ifndef YYSTACK_ALLOC_MAXIMUM
01057 #   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
01058 #  endif
01059 #  if (defined __cplusplus && ! defined EXIT_SUCCESS \
01060        && ! ((defined YYMALLOC || defined malloc) \
01061              && (defined YYFREE || defined free)))
01062 #   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
01063 #   ifndef EXIT_SUCCESS
01064 #    define EXIT_SUCCESS 0
01065 #   endif
01066 #  endif
01067 #  ifndef YYMALLOC
01068 #   define YYMALLOC malloc
01069 #   if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
01070      || defined __cplusplus || defined _MSC_VER)
01071 void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
01072 #   endif
01073 #  endif
01074 #  ifndef YYFREE
01075 #   define YYFREE free
01076 #   if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
01077      || defined __cplusplus || defined _MSC_VER)
01078 void free (void *); /* INFRINGES ON USER NAME SPACE */
01079 #   endif
01080 #  endif
01081 # endif
01082 #endif /* ! defined yyoverflow || YYERROR_VERBOSE */
01083 
01084 
01085 #if (! defined yyoverflow \
01086      && (! defined __cplusplus \
01087          || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
01088 
01089 /* A type that is properly aligned for any stack member.  */
01090 union yyalloc
01091 {
01092   yytype_int16 yyss_alloc;
01093   YYSTYPE yyvs_alloc;
01094 };
01095 
01096 /* The size of the maximum gap between one aligned stack and the next.  */
01097 # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
01098 
01099 /* The size of an array large to enough to hold all stacks, each with
01100    N elements.  */
01101 # define YYSTACK_BYTES(N) \
01102      ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
01103       + YYSTACK_GAP_MAXIMUM)
01104 
01105 # define YYCOPY_NEEDED 1
01106 
01107 /* Relocate STACK from its old location to the new one.  The
01108    local variables YYSIZE and YYSTACKSIZE give the old and new number of
01109    elements in the stack, and YYPTR gives the new location of the
01110    stack.  Advance YYPTR to a properly aligned location for the next
01111    stack.  */
01112 # define YYSTACK_RELOCATE(Stack_alloc, Stack)                           \
01113     do                                                                  \
01114       {                                                                 \
01115         YYSIZE_T yynewbytes;                                            \
01116         YYCOPY (&yyptr->Stack_alloc, Stack, yysize);                    \
01117         Stack = &yyptr->Stack_alloc;                                    \
01118         yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
01119         yyptr += yynewbytes / sizeof (*yyptr);                          \
01120       }                                                                 \
01121     while (YYID (0))
01122 
01123 #endif
01124 
01125 #if defined YYCOPY_NEEDED && YYCOPY_NEEDED
01126 /* Copy COUNT objects from FROM to TO.  The source and destination do
01127    not overlap.  */
01128 # ifndef YYCOPY
01129 #  if defined __GNUC__ && 1 < __GNUC__
01130 #   define YYCOPY(To, From, Count) \
01131       __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
01132 #  else
01133 #   define YYCOPY(To, From, Count)              \
01134       do                                        \
01135         {                                       \
01136           YYSIZE_T yyi;                         \
01137           for (yyi = 0; yyi < (Count); yyi++)   \
01138             (To)[yyi] = (From)[yyi];            \
01139         }                                       \
01140       while (YYID (0))
01141 #  endif
01142 # endif
01143 #endif /* !YYCOPY_NEEDED */
01144 
01145 /* YYFINAL -- State number of the termination state.  */
01146 #define YYFINAL  3
01147 /* YYLAST -- Last index in YYTABLE.  */
01148 #define YYLAST   11071
01149 
01150 /* YYNTOKENS -- Number of terminals.  */
01151 #define YYNTOKENS  144
01152 /* YYNNTS -- Number of nonterminals.  */
01153 #define YYNNTS  203
01154 /* YYNRULES -- Number of rules.  */
01155 #define YYNRULES  626
01156 /* YYNRULES -- Number of states.  */
01157 #define YYNSTATES  1059
01158 
01159 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
01160 #define YYUNDEFTOK  2
01161 #define YYMAXUTOK   354
01162 
01163 #define YYTRANSLATE(YYX)                                                \
01164   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
01165 
01166 /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
01167 static const yytype_uint8 yytranslate[] =
01168 {
01169        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01170      143,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01171        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01172        2,     2,   142,   129,     2,     2,     2,   127,   122,     2,
01173      138,   139,   125,   123,   136,   124,   135,   126,     2,     2,
01174        2,     2,     2,     2,     2,     2,     2,     2,   117,   141,
01175      119,   115,   118,   116,     2,     2,     2,     2,     2,     2,
01176        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01177        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01178        2,   134,     2,   140,   121,     2,   137,     2,     2,     2,
01179        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01180        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01181        2,     2,     2,   132,   120,   133,   130,     2,    81,    82,
01182       68,    69,    70,     2,    71,    85,    86,    76,    75,    72,
01183       73,    74,    79,    80,    83,    84,     2,     2,     2,     2,
01184        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01185        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01186        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01187        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01188        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01189        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01190        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01191        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01192        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01193        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01194        2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
01195        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
01196       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
01197       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
01198       35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
01199       45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
01200       55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
01201       65,    66,    67,    77,    78,    87,    88,    89,    90,    91,
01202       92,    93,    94,    95,    96,    97,    98,    99,   100,   101,
01203      102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
01204      112,   113,   114,   128,   131
01205 };
01206 
01207 #if YYDEBUG
01208 /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
01209    YYRHS.  */
01210 static const yytype_uint16 yyprhs[] =
01211 {
01212        0,     0,     3,     4,     7,    10,    12,    14,    18,    21,
01213       23,    24,    30,    35,    38,    40,    42,    46,    49,    51,
01214       52,    58,    59,    64,    68,    72,    76,    79,    83,    87,
01215       91,    95,    99,   104,   106,   110,   114,   121,   127,   133,
01216      139,   145,   149,   153,   157,   159,   163,   167,   169,   173,
01217      177,   181,   184,   186,   188,   190,   192,   194,   199,   200,
01218      206,   208,   211,   215,   220,   226,   231,   237,   240,   243,
01219      246,   249,   252,   254,   258,   260,   264,   266,   269,   273,
01220      279,   282,   287,   290,   295,   297,   301,   303,   307,   310,
01221      314,   316,   320,   322,   324,   329,   333,   337,   341,   345,
01222      348,   350,   352,   354,   359,   363,   367,   371,   375,   378,
01223      380,   382,   384,   387,   389,   393,   395,   397,   399,   401,
01224      403,   405,   407,   409,   411,   413,   414,   419,   421,   423,
01225      425,   427,   429,   431,   433,   435,   437,   439,   441,   443,
01226      445,   447,   449,   451,   453,   455,   457,   459,   461,   463,
01227      465,   467,   469,   471,   473,   475,   477,   479,   481,   483,
01228      485,   487,   489,   491,   493,   495,   497,   499,   501,   503,
01229      505,   507,   509,   511,   513,   515,   517,   519,   521,   523,
01230      525,   527,   529,   531,   533,   535,   537,   539,   541,   543,
01231      545,   547,   549,   551,   553,   555,   557,   559,   561,   565,
01232      571,   575,   581,   588,   594,   600,   606,   612,   617,   621,
01233      625,   629,   633,   637,   641,   645,   649,   653,   658,   661,
01234      664,   668,   672,   676,   680,   684,   688,   692,   696,   700,
01235      704,   708,   712,   716,   719,   722,   726,   730,   734,   738,
01236      739,   744,   751,   753,   755,   757,   760,   765,   768,   772,
01237      774,   776,   778,   780,   783,   788,   791,   793,   796,   799,
01238      804,   806,   807,   810,   813,   816,   818,   820,   823,   827,
01239      832,   834,   836,   840,   845,   848,   850,   852,   854,   856,
01240      858,   860,   862,   864,   866,   868,   870,   871,   876,   877,
01241      881,   882,   883,   889,   893,   897,   900,   904,   908,   910,
01242      915,   919,   921,   922,   929,   934,   938,   941,   943,   946,
01243      949,   956,   963,   964,   965,   973,   974,   975,   983,   989,
01244      994,   995,   996,  1006,  1007,  1014,  1015,  1016,  1025,  1026,
01245     1032,  1033,  1040,  1041,  1042,  1052,  1054,  1056,  1058,  1060,
01246     1062,  1064,  1066,  1068,  1070,  1072,  1074,  1076,  1078,  1080,
01247     1082,  1084,  1086,  1088,  1091,  1093,  1095,  1097,  1103,  1105,
01248     1108,  1110,  1112,  1114,  1118,  1120,  1124,  1126,  1131,  1138,
01249     1142,  1148,  1151,  1156,  1158,  1162,  1167,  1170,  1173,  1175,
01250     1178,  1179,  1186,  1195,  1200,  1207,  1212,  1215,  1222,  1225,
01251     1230,  1237,  1240,  1245,  1248,  1253,  1255,  1257,  1259,  1263,
01252     1265,  1270,  1272,  1277,  1279,  1283,  1285,  1287,  1288,  1289,
01253     1290,  1296,  1301,  1303,  1307,  1311,  1312,  1318,  1321,  1326,
01254     1332,  1338,  1341,  1342,  1348,  1349,  1355,  1359,  1360,  1365,
01255     1366,  1371,  1374,  1376,  1381,  1382,  1388,  1389,  1395,  1401,
01256     1403,  1405,  1412,  1414,  1416,  1418,  1420,  1423,  1425,  1428,
01257     1430,  1432,  1434,  1436,  1438,  1440,  1442,  1445,  1449,  1453,
01258     1457,  1461,  1465,  1466,  1470,  1472,  1475,  1479,  1483,  1484,
01259     1488,  1492,  1496,  1500,  1504,  1505,  1509,  1510,  1514,  1515,
01260     1518,  1519,  1522,  1523,  1526,  1528,  1529,  1533,  1534,  1535,
01261     1536,  1543,  1545,  1547,  1549,  1551,  1554,  1556,  1558,  1560,
01262     1562,  1566,  1568,  1571,  1573,  1575,  1577,  1579,  1581,  1583,
01263     1585,  1587,  1589,  1591,  1593,  1595,  1597,  1599,  1601,  1603,
01264     1605,  1607,  1609,  1611,  1613,  1615,  1617,  1618,  1623,  1626,
01265     1630,  1631,  1635,  1640,  1643,  1646,  1648,  1651,  1652,  1659,
01266     1668,  1673,  1680,  1685,  1692,  1695,  1700,  1707,  1710,  1715,
01267     1718,  1723,  1725,  1726,  1728,  1730,  1732,  1734,  1736,  1738,
01268     1740,  1744,  1746,  1750,  1752,  1755,  1757,  1760,  1762,  1764,
01269     1768,  1770,  1774,  1776,  1778,  1781,  1783,  1787,  1791,  1793,
01270     1797,  1799,  1803,  1805,  1807,  1810,  1812,  1814,  1816,  1819,
01271     1822,  1824,  1826,  1827,  1832,  1834,  1837,  1839,  1843,  1847,
01272     1850,  1853,  1855,  1857,  1859,  1861,  1863,  1865,  1867,  1869,
01273     1871,  1873,  1875,  1877,  1878,  1880,  1881,  1883,  1886,  1889,
01274     1890,  1892,  1894,  1896,  1898,  1900,  1903
01275 };
01276 
01277 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
01278 static const yytype_int16 yyrhs[] =
01279 {
01280      145,     0,    -1,    -1,   146,   147,    -1,   148,   339,    -1,
01281      346,    -1,   149,    -1,   148,   345,   149,    -1,     1,   149,
01282       -1,   156,    -1,    -1,    47,   150,   132,   147,   133,    -1,
01283      152,   265,   233,   268,    -1,   153,   339,    -1,   346,    -1,
01284      154,    -1,   153,   345,   154,    -1,     1,   156,    -1,   156,
01285       -1,    -1,    47,   155,   132,   147,   133,    -1,    -1,    45,
01286      179,   157,   179,    -1,    45,    54,    54,    -1,    45,    54,
01287       66,    -1,    45,    54,    65,    -1,     6,   180,    -1,   156,
01288       40,   160,    -1,   156,    41,   160,    -1,   156,    42,   160,
01289       -1,   156,    43,   160,    -1,   156,    44,   156,    -1,    48,
01290      132,   152,   133,    -1,   158,    -1,   167,   115,   161,    -1,
01291      301,    89,   161,    -1,   218,   134,   190,   342,    89,   161,
01292       -1,   218,   135,    52,    89,   161,    -1,   218,   135,    56,
01293       89,   161,    -1,   218,    87,    56,    89,   161,    -1,   218,
01294       87,    52,    89,   161,    -1,   302,    89,   161,    -1,   174,
01295      115,   198,    -1,   167,   115,   197,    -1,   159,    -1,   174,
01296      115,   161,    -1,   174,   115,   158,    -1,   161,    -1,   159,
01297       37,   159,    -1,   159,    38,   159,    -1,    39,   340,   159,
01298       -1,   129,   161,    -1,   184,    -1,   159,    -1,   166,    -1,
01299      162,    -1,   254,    -1,   254,   338,   336,   192,    -1,    -1,
01300       96,   164,   241,   152,   133,    -1,   335,    -1,   165,   192,
01301       -1,   165,   192,   163,    -1,   218,   135,   336,   192,    -1,
01302      218,   135,   336,   192,   163,    -1,   218,    87,   336,   192,
01303       -1,   218,    87,   336,   192,   163,    -1,    32,   192,    -1,
01304       31,   192,    -1,    30,   191,    -1,    21,   191,    -1,    22,
01305      191,    -1,   169,    -1,    91,   168,   341,    -1,   169,    -1,
01306       91,   168,   341,    -1,   171,    -1,   171,   170,    -1,   171,
01307       97,   173,    -1,   171,    97,   173,   136,   172,    -1,   171,
01308       97,    -1,   171,    97,   136,   172,    -1,    97,   173,    -1,
01309       97,   173,   136,   172,    -1,    97,    -1,    97,   136,   172,
01310       -1,   173,    -1,    91,   168,   341,    -1,   170,   136,    -1,
01311      171,   170,   136,    -1,   170,    -1,   172,   136,   170,    -1,
01312      298,    -1,   299,    -1,   218,   134,   190,   342,    -1,   218,
01313      135,    52,    -1,   218,    87,    52,    -1,   218,   135,    56,
01314       -1,   218,    87,    56,    -1,    88,    56,    -1,   302,    -1,
01315      298,    -1,   299,    -1,   218,   134,   190,   342,    -1,   218,
01316      135,    52,    -1,   218,    87,    52,    -1,   218,   135,    56,
01317       -1,   218,    87,    56,    -1,    88,    56,    -1,   302,    -1,
01318       52,    -1,    56,    -1,    88,   175,    -1,   175,    -1,   218,
01319       87,   175,    -1,    52,    -1,    56,    -1,    53,    -1,   182,
01320       -1,   183,    -1,   177,    -1,   293,    -1,   178,    -1,   295,
01321       -1,   179,    -1,    -1,   180,   136,   181,   179,    -1,   120,
01322       -1,   121,    -1,   122,    -1,    71,    -1,    72,    -1,    73,
01323       -1,    79,    -1,    80,    -1,   118,    -1,    75,    -1,   119,
01324       -1,    76,    -1,    74,    -1,    85,    -1,    86,    -1,   123,
01325       -1,   124,    -1,   125,    -1,    97,    -1,   126,    -1,   127,
01326       -1,    70,    -1,    98,    -1,   129,    -1,   130,    -1,    68,
01327       -1,    69,    -1,    83,    -1,    84,    -1,   137,    -1,    49,
01328       -1,    50,    -1,    51,    -1,    47,    -1,    48,    -1,    45,
01329       -1,    37,    -1,     7,    -1,    21,    -1,    16,    -1,     3,
01330       -1,     5,    -1,    46,    -1,    26,    -1,    15,    -1,    14,
01331       -1,    10,    -1,     9,    -1,    36,    -1,    20,    -1,    25,
01332       -1,     4,    -1,    22,    -1,    34,    -1,    39,    -1,    38,
01333       -1,    23,    -1,     8,    -1,    24,    -1,    30,    -1,    33,
01334       -1,    32,    -1,    13,    -1,    35,    -1,     6,    -1,    17,
01335       -1,    31,    -1,    11,    -1,    12,    -1,    18,    -1,    19,
01336       -1,   174,   115,   184,    -1,   174,   115,   184,    44,   184,
01337       -1,   301,    89,   184,    -1,   301,    89,   184,    44,   184,
01338       -1,   218,   134,   190,   342,    89,   184,    -1,   218,   135,
01339       52,    89,   184,    -1,   218,   135,    56,    89,   184,    -1,
01340      218,    87,    52,    89,   184,    -1,   218,    87,    56,    89,
01341      184,    -1,    88,    56,    89,   184,    -1,   302,    89,   184,
01342       -1,   184,    81,   184,    -1,   184,    82,   184,    -1,   184,
01343      123,   184,    -1,   184,   124,   184,    -1,   184,   125,   184,
01344       -1,   184,   126,   184,    -1,   184,   127,   184,    -1,   184,
01345       70,   184,    -1,   128,   297,    70,   184,    -1,    68,   184,
01346       -1,    69,   184,    -1,   184,   120,   184,    -1,   184,   121,
01347      184,    -1,   184,   122,   184,    -1,   184,    71,   184,    -1,
01348      184,   118,   184,    -1,   184,    75,   184,    -1,   184,   119,
01349      184,    -1,   184,    76,   184,    -1,   184,    72,   184,    -1,
01350      184,    73,   184,    -1,   184,    74,   184,    -1,   184,    79,
01351      184,    -1,   184,    80,   184,    -1,   129,   184,    -1,   130,
01352      184,    -1,   184,    85,   184,    -1,   184,    86,   184,    -1,
01353      184,    77,   184,    -1,   184,    78,   184,    -1,    -1,    46,
01354      340,   185,   184,    -1,   184,   116,   184,   340,   117,   184,
01355       -1,   199,    -1,   184,    -1,   346,    -1,   196,   343,    -1,
01356      196,   136,   333,   343,    -1,   333,   343,    -1,   138,   190,
01357      341,    -1,   346,    -1,   188,    -1,   346,    -1,   191,    -1,
01358      196,   136,    -1,   196,   136,   333,   136,    -1,   333,   136,
01359       -1,   166,    -1,   196,   195,    -1,   333,   195,    -1,   196,
01360      136,   333,   195,    -1,   194,    -1,    -1,   193,   191,    -1,
01361       99,   186,    -1,   136,   194,    -1,   346,    -1,   186,    -1,
01362       97,   186,    -1,   196,   136,   186,    -1,   196,   136,    97,
01363      186,    -1,   198,    -1,   186,    -1,   196,   136,   186,    -1,
01364      196,   136,    97,   186,    -1,    97,   186,    -1,   269,    -1,
01365      270,    -1,   273,    -1,   274,    -1,   275,    -1,   280,    -1,
01366      278,    -1,   281,    -1,   300,    -1,   302,    -1,    53,    -1,
01367       -1,   219,   200,   151,   229,    -1,    -1,    92,   201,   341,
01368       -1,    -1,    -1,    92,   202,   159,   203,   341,    -1,    91,
01369      152,   139,    -1,   218,    87,    56,    -1,    88,    56,    -1,
01370       94,   187,   140,    -1,    95,   332,   133,    -1,    30,    -1,
01371       31,   138,   191,   341,    -1,    31,   138,   341,    -1,    31,
01372       -1,    -1,    46,   340,   138,   204,   159,   341,    -1,    39,
01373      138,   159,   341,    -1,    39,   138,   341,    -1,   165,   260,
01374       -1,   255,    -1,   255,   260,    -1,   100,   246,    -1,   220,
01375      160,   230,   152,   232,   229,    -1,   221,   160,   230,   152,
01376      233,   229,    -1,    -1,    -1,   222,   205,   160,   231,   206,
01377      152,   229,    -1,    -1,    -1,   223,   207,   160,   231,   208,
01378      152,   229,    -1,   224,   160,   339,   263,   229,    -1,   224,
01379      339,   263,   229,    -1,    -1,    -1,   225,   234,    25,   209,
01380      160,   231,   210,   152,   229,    -1,    -1,   226,   176,   303,
01381      211,   151,   229,    -1,    -1,    -1,   226,    85,   159,   212,
01382      344,   213,   151,   229,    -1,    -1,   227,   176,   214,   151,
01383      229,    -1,    -1,   228,   177,   215,   305,   151,   229,    -1,
01384       -1,    -1,   228,   330,   338,   216,   177,   217,   305,   151,
01385      229,    -1,    21,    -1,    22,    -1,    23,    -1,    24,    -1,
01386      199,    -1,     7,    -1,    11,    -1,    12,    -1,    18,    -1,
01387       19,    -1,    16,    -1,    20,    -1,     3,    -1,     4,    -1,
01388        5,    -1,    10,    -1,   344,    -1,    13,    -1,   344,    13,
01389       -1,   344,    -1,    27,    -1,   233,    -1,    14,   160,   230,
01390      152,   232,    -1,   346,    -1,    15,   152,    -1,   174,    -1,
01391      167,    -1,   311,    -1,    91,   237,   341,    -1,   235,    -1,
01392      236,   136,   235,    -1,   236,    -1,   236,   136,    97,   311,
01393       -1,   236,   136,    97,   311,   136,   236,    -1,   236,   136,
01394       97,    -1,   236,   136,    97,   136,   236,    -1,    97,   311,
01395       -1,    97,   311,   136,   236,    -1,    97,    -1,    97,   136,
01396      236,    -1,   317,   136,   320,   329,    -1,   317,   329,    -1,
01397      320,   329,    -1,   328,    -1,   136,   238,    -1,    -1,   313,
01398      136,   323,   136,   326,   239,    -1,   313,   136,   323,   136,
01399      326,   136,   313,   239,    -1,   313,   136,   323,   239,    -1,
01400      313,   136,   323,   136,   313,   239,    -1,   313,   136,   326,
01401      239,    -1,   313,   136,    -1,   313,   136,   326,   136,   313,
01402      239,    -1,   313,   239,    -1,   323,   136,   326,   239,    -1,
01403      323,   136,   326,   136,   313,   239,    -1,   323,   239,    -1,
01404      323,   136,   313,   239,    -1,   326,   239,    -1,   326,   136,
01405      313,   239,    -1,   238,    -1,   346,    -1,   242,    -1,   120,
01406      243,   120,    -1,    78,    -1,   120,   240,   243,   120,    -1,
01407      340,    -1,   340,   141,   244,   340,    -1,   245,    -1,   244,
01408      136,   245,    -1,    52,    -1,   310,    -1,    -1,    -1,    -1,
01409      247,   248,   250,   249,   251,    -1,   138,   309,   243,   139,
01410       -1,   309,    -1,   113,   152,   133,    -1,    29,   152,    10,
01411       -1,    -1,    28,   253,   241,   152,    10,    -1,   166,   252,
01412       -1,   254,   338,   336,   189,    -1,   254,   338,   336,   189,
01413      260,    -1,   254,   338,   336,   192,   252,    -1,   165,   188,
01414       -1,    -1,   218,   135,   336,   256,   189,    -1,    -1,   218,
01415       87,   336,   257,   188,    -1,   218,    87,   337,    -1,    -1,
01416      218,   135,   258,   188,    -1,    -1,   218,    87,   259,   188,
01417       -1,    32,   188,    -1,    32,    -1,   218,   134,   190,   342,
01418       -1,    -1,   132,   261,   241,   152,   133,    -1,    -1,    26,
01419      262,   241,   152,    10,    -1,    17,   196,   230,   152,   264,
01420       -1,   233,    -1,   263,    -1,     8,   266,   267,   230,   152,
01421      265,    -1,   346,    -1,   186,    -1,   198,    -1,   346,    -1,
01422       90,   174,    -1,   346,    -1,     9,   152,    -1,   346,    -1,
01423      296,    -1,   293,    -1,   295,    -1,   271,    -1,    64,    -1,
01424      272,    -1,   271,   272,    -1,   102,   284,   112,    -1,   103,
01425      285,   112,    -1,   104,   286,    67,    -1,   105,   142,   112,
01426       -1,   105,   276,   112,    -1,    -1,   276,   277,   142,    -1,
01427      287,    -1,   277,   287,    -1,   107,   142,   112,    -1,   107,
01428      279,   112,    -1,    -1,   279,   277,   142,    -1,   106,   142,
01429      112,    -1,   106,   282,   112,    -1,   108,   142,   112,    -1,
01430      108,   283,   112,    -1,    -1,   282,    63,   142,    -1,    -1,
01431      283,    63,   142,    -1,    -1,   284,   287,    -1,    -1,   285,
01432      287,    -1,    -1,   286,   287,    -1,    63,    -1,    -1,   111,
01433      288,   292,    -1,    -1,    -1,    -1,   109,   289,   290,   291,
01434      152,   110,    -1,    54,    -1,    55,    -1,    57,    -1,   302,
01435       -1,   101,   294,    -1,   177,    -1,    55,    -1,    54,    -1,
01436       57,    -1,   101,   285,   112,    -1,   297,    -1,   128,   297,
01437       -1,    59,    -1,    60,    -1,    61,    -1,    62,    -1,    52,
01438       -1,    55,    -1,    54,    -1,    56,    -1,    57,    -1,    34,
01439       -1,    33,    -1,    35,    -1,    36,    -1,    50,    -1,    49,
01440       -1,    51,    -1,   298,    -1,   299,    -1,   298,    -1,   299,
01441       -1,    65,    -1,    66,    -1,   344,    -1,    -1,   119,   304,
01442      160,   344,    -1,     1,   344,    -1,   138,   309,   341,    -1,
01443       -1,   306,   309,   344,    -1,   318,   136,   320,   329,    -1,
01444      318,   329,    -1,   320,   329,    -1,   328,    -1,   136,   307,
01445       -1,    -1,   313,   136,   324,   136,   326,   308,    -1,   313,
01446      136,   324,   136,   326,   136,   313,   308,    -1,   313,   136,
01447      324,   308,    -1,   313,   136,   324,   136,   313,   308,    -1,
01448      313,   136,   326,   308,    -1,   313,   136,   326,   136,   313,
01449      308,    -1,   313,   308,    -1,   324,   136,   326,   308,    -1,
01450      324,   136,   326,   136,   313,   308,    -1,   324,   308,    -1,
01451      324,   136,   313,   308,    -1,   326,   308,    -1,   326,   136,
01452      313,   308,    -1,   307,    -1,    -1,    56,    -1,    55,    -1,
01453       54,    -1,    57,    -1,   310,    -1,    52,    -1,   311,    -1,
01454       91,   237,   341,    -1,   312,    -1,   313,   136,   312,    -1,
01455       58,    -1,   314,   186,    -1,   314,    -1,   314,   218,    -1,
01456      314,    -1,   316,    -1,   317,   136,   316,    -1,   315,    -1,
01457      318,   136,   315,    -1,    70,    -1,    98,    -1,   319,    52,
01458       -1,   319,    -1,   311,   115,   186,    -1,   311,   115,   218,
01459       -1,   322,    -1,   323,   136,   322,    -1,   321,    -1,   324,
01460      136,   321,    -1,   125,    -1,    97,    -1,   325,    52,    -1,
01461      325,    -1,   122,    -1,    99,    -1,   327,    52,    -1,   136,
01462      328,    -1,   346,    -1,   300,    -1,    -1,   138,   331,   159,
01463      341,    -1,   346,    -1,   333,   343,    -1,   334,    -1,   333,
01464      136,   334,    -1,   186,    90,   186,    -1,    58,   186,    -1,
01465       98,   186,    -1,    52,    -1,    56,    -1,    53,    -1,    52,
01466       -1,    56,    -1,    53,    -1,   182,    -1,    52,    -1,    53,
01467       -1,   182,    -1,   135,    -1,    87,    -1,    -1,   345,    -1,
01468       -1,   143,    -1,   340,   139,    -1,   340,   140,    -1,    -1,
01469      143,    -1,   136,    -1,   141,    -1,   143,    -1,   344,    -1,
01470      345,   141,    -1,    -1
01471 };
01472 
01473 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
01474 static const yytype_uint16 yyrline[] =
01475 {
01476        0,   863,   863,   863,   894,   905,   914,   922,   930,   936,
01477      938,   937,   958,   991,  1002,  1011,  1019,  1027,  1033,  1038,
01478     1037,  1058,  1058,  1066,  1074,  1085,  1095,  1103,  1112,  1121,
01479     1134,  1147,  1156,  1168,  1169,  1179,  1184,  1205,  1210,  1215,
01480     1225,  1230,  1240,  1249,  1258,  1261,  1270,  1282,  1283,  1291,
01481     1299,  1307,  1315,  1318,  1330,  1331,  1334,  1335,  1347,  1346,
01482     1368,  1378,  1387,  1400,  1409,  1421,  1430,  1442,  1451,  1460,
01483     1468,  1476,  1486,  1487,  1497,  1498,  1508,  1516,  1524,  1532,
01484     1541,  1549,  1558,  1566,  1575,  1583,  1594,  1595,  1605,  1613,
01485     1623,  1631,  1641,  1645,  1649,  1657,  1665,  1673,  1681,  1693,
01486     1703,  1715,  1724,  1733,  1741,  1749,  1757,  1765,  1778,  1791,
01487     1802,  1810,  1813,  1821,  1829,  1839,  1840,  1841,  1842,  1847,
01488     1858,  1859,  1862,  1870,  1873,  1881,  1881,  1891,  1892,  1893,
01489     1894,  1895,  1896,  1897,  1898,  1899,  1900,  1901,  1902,  1903,
01490     1904,  1905,  1906,  1907,  1908,  1909,  1910,  1911,  1912,  1913,
01491     1914,  1915,  1916,  1917,  1918,  1919,  1920,  1923,  1923,  1923,
01492     1924,  1924,  1925,  1925,  1925,  1926,  1926,  1926,  1926,  1927,
01493     1927,  1927,  1927,  1928,  1928,  1928,  1929,  1929,  1929,  1929,
01494     1930,  1930,  1930,  1930,  1931,  1931,  1931,  1931,  1932,  1932,
01495     1932,  1932,  1933,  1933,  1933,  1933,  1934,  1934,  1937,  1946,
01496     1956,  1961,  1971,  1997,  2002,  2007,  2012,  2022,  2032,  2043,
01497     2057,  2071,  2079,  2087,  2095,  2103,  2111,  2119,  2128,  2136,
01498     2144,  2152,  2160,  2168,  2176,  2184,  2192,  2200,  2208,  2216,
01499     2224,  2232,  2243,  2251,  2259,  2267,  2275,  2283,  2291,  2299,
01500     2299,  2309,  2319,  2325,  2337,  2338,  2342,  2350,  2360,  2370,
01501     2371,  2374,  2375,  2376,  2380,  2388,  2398,  2407,  2415,  2425,
01502     2434,  2443,  2443,  2455,  2465,  2469,  2475,  2483,  2491,  2505,
01503     2521,  2522,  2525,  2539,  2554,  2564,  2565,  2566,  2567,  2568,
01504     2569,  2570,  2571,  2572,  2573,  2574,  2583,  2582,  2610,  2610,
01505     2619,  2623,  2618,  2632,  2640,  2648,  2656,  2669,  2677,  2685,
01506     2693,  2701,  2709,  2709,  2719,  2727,  2735,  2745,  2746,  2756,
01507     2760,  2772,  2784,  2784,  2784,  2795,  2795,  2795,  2806,  2817,
01508     2826,  2828,  2825,  2892,  2891,  2913,  2918,  2912,  2937,  2936,
01509     2958,  2957,  2980,  2981,  2980,  3001,  3009,  3017,  3025,  3035,
01510     3047,  3053,  3059,  3065,  3071,  3077,  3083,  3089,  3095,  3101,
01511     3111,  3117,  3122,  3123,  3130,  3135,  3138,  3139,  3152,  3153,
01512     3163,  3164,  3167,  3175,  3185,  3193,  3203,  3211,  3220,  3229,
01513     3237,  3245,  3254,  3266,  3274,  3285,  3289,  3293,  3297,  3303,
01514     3308,  3313,  3317,  3321,  3325,  3329,  3333,  3341,  3345,  3349,
01515     3353,  3357,  3361,  3365,  3369,  3373,  3379,  3380,  3386,  3395,
01516     3404,  3415,  3419,  3429,  3436,  3445,  3453,  3459,  3462,  3467,
01517     3459,  3483,  3491,  3497,  3501,  3508,  3507,  3528,  3544,  3553,
01518     3565,  3579,  3589,  3588,  3605,  3604,  3620,  3629,  3628,  3646,
01519     3645,  3662,  3670,  3678,  3693,  3692,  3712,  3711,  3732,  3744,
01520     3745,  3748,  3767,  3770,  3778,  3786,  3789,  3793,  3796,  3804,
01521     3807,  3808,  3816,  3819,  3836,  3837,  3838,  3848,  3858,  3885,
01522     3950,  3959,  3970,  3977,  3987,  3995,  4005,  4014,  4025,  4032,
01523     4044,  4053,  4063,  4072,  4083,  4090,  4101,  4108,  4123,  4130,
01524     4141,  4148,  4159,  4166,  4195,  4197,  4196,  4213,  4219,  4224,
01525     4212,  4243,  4251,  4259,  4267,  4270,  4281,  4282,  4283,  4284,
01526     4287,  4298,  4299,  4309,  4310,  4311,  4312,  4315,  4316,  4317,
01527     4318,  4319,  4322,  4323,  4324,  4325,  4326,  4327,  4328,  4331,
01528     4344,  4354,  4362,  4372,  4373,  4376,  4385,  4384,  4393,  4405,
01529     4415,  4415,  4428,  4432,  4436,  4440,  4446,  4451,  4456,  4460,
01530     4464,  4468,  4472,  4476,  4480,  4484,  4488,  4492,  4496,  4500,
01531     4504,  4508,  4513,  4519,  4528,  4537,  4546,  4557,  4558,  4565,
01532     4574,  4593,  4600,  4614,  4621,  4630,  4641,  4650,  4661,  4669,
01533     4686,  4694,  4710,  4711,  4714,  4719,  4725,  4737,  4749,  4757,
01534     4773,  4781,  4797,  4798,  4801,  4814,  4825,  4826,  4829,  4846,
01535     4850,  4860,  4870,  4870,  4899,  4900,  4910,  4917,  4927,  4939,
01536     4947,  4959,  4960,  4961,  4964,  4965,  4966,  4967,  4970,  4971,
01537     4972,  4975,  4980,  4987,  4988,  4991,  4992,  4995,  4998,  5001,
01538     5002,  5003,  5006,  5007,  5010,  5011,  5015
01539 };
01540 #endif
01541 
01542 #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
01543 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
01544    First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
01545 static const char *const yytname[] =
01546 {
01547   "\"end-of-input\"", "error", "$undefined", "keyword_class",
01548   "keyword_module", "keyword_def", "keyword_undef", "keyword_begin",
01549   "keyword_rescue", "keyword_ensure", "keyword_end", "keyword_if",
01550   "keyword_unless", "keyword_then", "keyword_elsif", "keyword_else",
01551   "keyword_case", "keyword_when", "keyword_while", "keyword_until",
01552   "keyword_for", "keyword_break", "keyword_next", "keyword_redo",
01553   "keyword_retry", "keyword_in", "keyword_do", "keyword_do_cond",
01554   "keyword_do_block", "keyword_do_LAMBDA", "keyword_return",
01555   "keyword_yield", "keyword_super", "keyword_self", "keyword_nil",
01556   "keyword_true", "keyword_false", "keyword_and", "keyword_or",
01557   "keyword_not", "modifier_if", "modifier_unless", "modifier_while",
01558   "modifier_until", "modifier_rescue", "keyword_alias", "keyword_defined",
01559   "keyword_BEGIN", "keyword_END", "keyword__LINE__", "keyword__FILE__",
01560   "keyword__ENCODING__", "tIDENTIFIER", "tFID", "tGVAR", "tIVAR",
01561   "tCONSTANT", "tCVAR", "tLABEL", "tINTEGER", "tFLOAT", "tRATIONAL",
01562   "tIMAGINARY", "tSTRING_CONTENT", "tCHAR", "tNTH_REF", "tBACK_REF",
01563   "tREGEXP_END", "\"unary+\"", "\"unary-\"", "\"**\"", "\"<=>\"", "\"==\"",
01564   "\"===\"", "\"!=\"", "\">=\"", "\"<=\"", "\"&&\"", "\"||\"", "\"=~\"",
01565   "\"!~\"", "\"..\"", "\"...\"", "\"[]\"", "\"[]=\"", "\"<<\"", "\">>\"",
01566   "\"::\"", "\":: at EXPR_BEG\"", "tOP_ASGN", "\"=>\"", "\"(\"",
01567   "\"( arg\"", "\")\"", "\"[\"", "\"{\"", "\"{ arg\"", "\"*\"",
01568   "\"**arg\"", "\"&\"", "\"->\"", "tSYMBEG", "tSTRING_BEG", "tXSTRING_BEG",
01569   "tREGEXP_BEG", "tWORDS_BEG", "tQWORDS_BEG", "tSYMBOLS_BEG",
01570   "tQSYMBOLS_BEG", "tSTRING_DBEG", "tSTRING_DEND", "tSTRING_DVAR",
01571   "tSTRING_END", "tLAMBEG", "tLOWEST", "'='", "'?'", "':'", "'>'", "'<'",
01572   "'|'", "'^'", "'&'", "'+'", "'-'", "'*'", "'/'", "'%'", "tUMINUS_NUM",
01573   "'!'", "'~'", "tLAST_TOKEN", "'{'", "'}'", "'['", "'.'", "','", "'`'",
01574   "'('", "')'", "']'", "';'", "' '", "'\\n'", "$accept", "program", "$@1",
01575   "top_compstmt", "top_stmts", "top_stmt", "$@2", "bodystmt", "compstmt",
01576   "stmts", "stmt_or_begin", "$@3", "stmt", "$@4", "command_asgn", "expr",
01577   "expr_value", "command_call", "block_command", "cmd_brace_block", "@5",
01578   "fcall", "command", "mlhs", "mlhs_inner", "mlhs_basic", "mlhs_item",
01579   "mlhs_head", "mlhs_post", "mlhs_node", "lhs", "cname", "cpath", "fname",
01580   "fsym", "fitem", "undef_list", "$@6", "op", "reswords", "arg", "$@7",
01581   "arg_value", "aref_args", "paren_args", "opt_paren_args",
01582   "opt_call_args", "call_args", "command_args", "@8", "block_arg",
01583   "opt_block_arg", "args", "mrhs_arg", "mrhs", "primary", "@9", "$@10",
01584   "$@11", "$@12", "$@13", "$@14", "$@15", "$@16", "$@17", "$@18", "$@19",
01585   "@20", "@21", "@22", "@23", "@24", "$@25", "$@26", "primary_value",
01586   "k_begin", "k_if", "k_unless", "k_while", "k_until", "k_case", "k_for",
01587   "k_class", "k_module", "k_def", "k_end", "then", "do", "if_tail",
01588   "opt_else", "for_var", "f_marg", "f_marg_list", "f_margs",
01589   "block_args_tail", "opt_block_args_tail", "block_param",
01590   "opt_block_param", "block_param_def", "opt_bv_decl", "bv_decls", "bvar",
01591   "lambda", "@27", "@28", "@29", "f_larglist", "lambda_body", "do_block",
01592   "@30", "block_call", "method_call", "@31", "@32", "@33", "@34",
01593   "brace_block", "@35", "@36", "case_body", "cases", "opt_rescue",
01594   "exc_list", "exc_var", "opt_ensure", "literal", "strings", "string",
01595   "string1", "xstring", "regexp", "words", "word_list", "word", "symbols",
01596   "symbol_list", "qwords", "qsymbols", "qword_list", "qsym_list",
01597   "string_contents", "xstring_contents", "regexp_contents",
01598   "string_content", "@37", "@38", "@39", "@40", "string_dvar", "symbol",
01599   "sym", "dsym", "numeric", "simple_numeric", "user_variable",
01600   "keyword_variable", "var_ref", "var_lhs", "backref", "superclass",
01601   "$@41", "f_arglist", "@42", "args_tail", "opt_args_tail", "f_args",
01602   "f_bad_arg", "f_norm_arg", "f_arg_item", "f_arg", "f_label", "f_kw",
01603   "f_block_kw", "f_block_kwarg", "f_kwarg", "kwrest_mark", "f_kwrest",
01604   "f_opt", "f_block_opt", "f_block_optarg", "f_optarg", "restarg_mark",
01605   "f_rest_arg", "blkarg_mark", "f_block_arg", "opt_f_block_arg",
01606   "singleton", "$@43", "assoc_list", "assocs", "assoc", "operation",
01607   "operation2", "operation3", "dot_or_colon", "opt_terms", "opt_nl",
01608   "rparen", "rbracket", "trailer", "term", "terms", "none", 0
01609 };
01610 #endif
01611 
01612 # ifdef YYPRINT
01613 /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
01614    token YYLEX-NUM.  */
01615 static const yytype_uint16 yytoknum[] =
01616 {
01617        0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
01618      265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
01619      275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
01620      285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
01621      295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
01622      305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
01623      315,   316,   317,   318,   319,   320,   321,   322,   130,   131,
01624      132,   134,   139,   140,   141,   138,   137,   323,   324,   142,
01625      143,   128,   129,   144,   145,   135,   136,   325,   326,   327,
01626      328,   329,   330,   331,   332,   333,   334,   335,   336,   337,
01627      338,   339,   340,   341,   342,   343,   344,   345,   346,   347,
01628      348,   349,   350,   351,   352,    61,    63,    58,    62,    60,
01629      124,    94,    38,    43,    45,    42,    47,    37,   353,    33,
01630      126,   354,   123,   125,    91,    46,    44,    96,    40,    41,
01631       93,    59,    32,    10
01632 };
01633 # endif
01634 
01635 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
01636 static const yytype_uint16 yyr1[] =
01637 {
01638        0,   144,   146,   145,   147,   148,   148,   148,   148,   149,
01639      150,   149,   151,   152,   153,   153,   153,   153,   154,   155,
01640      154,   157,   156,   156,   156,   156,   156,   156,   156,   156,
01641      156,   156,   156,   156,   156,   156,   156,   156,   156,   156,
01642      156,   156,   156,   156,   156,   158,   158,   159,   159,   159,
01643      159,   159,   159,   160,   161,   161,   162,   162,   164,   163,
01644      165,   166,   166,   166,   166,   166,   166,   166,   166,   166,
01645      166,   166,   167,   167,   168,   168,   169,   169,   169,   169,
01646      169,   169,   169,   169,   169,   169,   170,   170,   171,   171,
01647      172,   172,   173,   173,   173,   173,   173,   173,   173,   173,
01648      173,   174,   174,   174,   174,   174,   174,   174,   174,   174,
01649      175,   175,   176,   176,   176,   177,   177,   177,   177,   177,
01650      178,   178,   179,   179,   180,   181,   180,   182,   182,   182,
01651      182,   182,   182,   182,   182,   182,   182,   182,   182,   182,
01652      182,   182,   182,   182,   182,   182,   182,   182,   182,   182,
01653      182,   182,   182,   182,   182,   182,   182,   183,   183,   183,
01654      183,   183,   183,   183,   183,   183,   183,   183,   183,   183,
01655      183,   183,   183,   183,   183,   183,   183,   183,   183,   183,
01656      183,   183,   183,   183,   183,   183,   183,   183,   183,   183,
01657      183,   183,   183,   183,   183,   183,   183,   183,   184,   184,
01658      184,   184,   184,   184,   184,   184,   184,   184,   184,   184,
01659      184,   184,   184,   184,   184,   184,   184,   184,   184,   184,
01660      184,   184,   184,   184,   184,   184,   184,   184,   184,   184,
01661      184,   184,   184,   184,   184,   184,   184,   184,   184,   185,
01662      184,   184,   184,   186,   187,   187,   187,   187,   188,   189,
01663      189,   190,   190,   190,   190,   190,   191,   191,   191,   191,
01664      191,   193,   192,   194,   195,   195,   196,   196,   196,   196,
01665      197,   197,   198,   198,   198,   199,   199,   199,   199,   199,
01666      199,   199,   199,   199,   199,   199,   200,   199,   201,   199,
01667      202,   203,   199,   199,   199,   199,   199,   199,   199,   199,
01668      199,   199,   204,   199,   199,   199,   199,   199,   199,   199,
01669      199,   199,   205,   206,   199,   207,   208,   199,   199,   199,
01670      209,   210,   199,   211,   199,   212,   213,   199,   214,   199,
01671      215,   199,   216,   217,   199,   199,   199,   199,   199,   218,
01672      219,   220,   221,   222,   223,   224,   225,   226,   227,   228,
01673      229,   230,   230,   230,   231,   231,   232,   232,   233,   233,
01674      234,   234,   235,   235,   236,   236,   237,   237,   237,   237,
01675      237,   237,   237,   237,   237,   238,   238,   238,   238,   239,
01676      239,   240,   240,   240,   240,   240,   240,   240,   240,   240,
01677      240,   240,   240,   240,   240,   240,   241,   241,   242,   242,
01678      242,   243,   243,   244,   244,   245,   245,   247,   248,   249,
01679      246,   250,   250,   251,   251,   253,   252,   254,   254,   254,
01680      254,   255,   256,   255,   257,   255,   255,   258,   255,   259,
01681      255,   255,   255,   255,   261,   260,   262,   260,   263,   264,
01682      264,   265,   265,   266,   266,   266,   267,   267,   268,   268,
01683      269,   269,   269,   270,   271,   271,   271,   272,   273,   274,
01684      275,   275,   276,   276,   277,   277,   278,   278,   279,   279,
01685      280,   280,   281,   281,   282,   282,   283,   283,   284,   284,
01686      285,   285,   286,   286,   287,   288,   287,   289,   290,   291,
01687      287,   292,   292,   292,   292,   293,   294,   294,   294,   294,
01688      295,   296,   296,   297,   297,   297,   297,   298,   298,   298,
01689      298,   298,   299,   299,   299,   299,   299,   299,   299,   300,
01690      300,   301,   301,   302,   302,   303,   304,   303,   303,   305,
01691      306,   305,   307,   307,   307,   307,   308,   308,   309,   309,
01692      309,   309,   309,   309,   309,   309,   309,   309,   309,   309,
01693      309,   309,   309,   310,   310,   310,   310,   311,   311,   312,
01694      312,   313,   313,   314,   315,   315,   316,   316,   317,   317,
01695      318,   318,   319,   319,   320,   320,   321,   322,   323,   323,
01696      324,   324,   325,   325,   326,   326,   327,   327,   328,   329,
01697      329,   330,   331,   330,   332,   332,   333,   333,   334,   334,
01698      334,   335,   335,   335,   336,   336,   336,   336,   337,   337,
01699      337,   338,   338,   339,   339,   340,   340,   341,   342,   343,
01700      343,   343,   344,   344,   345,   345,   346
01701 };
01702 
01703 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
01704 static const yytype_uint8 yyr2[] =
01705 {
01706        0,     2,     0,     2,     2,     1,     1,     3,     2,     1,
01707        0,     5,     4,     2,     1,     1,     3,     2,     1,     0,
01708        5,     0,     4,     3,     3,     3,     2,     3,     3,     3,
01709        3,     3,     4,     1,     3,     3,     6,     5,     5,     5,
01710        5,     3,     3,     3,     1,     3,     3,     1,     3,     3,
01711        3,     2,     1,     1,     1,     1,     1,     4,     0,     5,
01712        1,     2,     3,     4,     5,     4,     5,     2,     2,     2,
01713        2,     2,     1,     3,     1,     3,     1,     2,     3,     5,
01714        2,     4,     2,     4,     1,     3,     1,     3,     2,     3,
01715        1,     3,     1,     1,     4,     3,     3,     3,     3,     2,
01716        1,     1,     1,     4,     3,     3,     3,     3,     2,     1,
01717        1,     1,     2,     1,     3,     1,     1,     1,     1,     1,
01718        1,     1,     1,     1,     1,     0,     4,     1,     1,     1,
01719        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
01720        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
01721        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
01722        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
01723        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
01724        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
01725        1,     1,     1,     1,     1,     1,     1,     1,     3,     5,
01726        3,     5,     6,     5,     5,     5,     5,     4,     3,     3,
01727        3,     3,     3,     3,     3,     3,     3,     4,     2,     2,
01728        3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
01729        3,     3,     3,     2,     2,     3,     3,     3,     3,     0,
01730        4,     6,     1,     1,     1,     2,     4,     2,     3,     1,
01731        1,     1,     1,     2,     4,     2,     1,     2,     2,     4,
01732        1,     0,     2,     2,     2,     1,     1,     2,     3,     4,
01733        1,     1,     3,     4,     2,     1,     1,     1,     1,     1,
01734        1,     1,     1,     1,     1,     1,     0,     4,     0,     3,
01735        0,     0,     5,     3,     3,     2,     3,     3,     1,     4,
01736        3,     1,     0,     6,     4,     3,     2,     1,     2,     2,
01737        6,     6,     0,     0,     7,     0,     0,     7,     5,     4,
01738        0,     0,     9,     0,     6,     0,     0,     8,     0,     5,
01739        0,     6,     0,     0,     9,     1,     1,     1,     1,     1,
01740        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
01741        1,     1,     1,     2,     1,     1,     1,     5,     1,     2,
01742        1,     1,     1,     3,     1,     3,     1,     4,     6,     3,
01743        5,     2,     4,     1,     3,     4,     2,     2,     1,     2,
01744        0,     6,     8,     4,     6,     4,     2,     6,     2,     4,
01745        6,     2,     4,     2,     4,     1,     1,     1,     3,     1,
01746        4,     1,     4,     1,     3,     1,     1,     0,     0,     0,
01747        5,     4,     1,     3,     3,     0,     5,     2,     4,     5,
01748        5,     2,     0,     5,     0,     5,     3,     0,     4,     0,
01749        4,     2,     1,     4,     0,     5,     0,     5,     5,     1,
01750        1,     6,     1,     1,     1,     1,     2,     1,     2,     1,
01751        1,     1,     1,     1,     1,     1,     2,     3,     3,     3,
01752        3,     3,     0,     3,     1,     2,     3,     3,     0,     3,
01753        3,     3,     3,     3,     0,     3,     0,     3,     0,     2,
01754        0,     2,     0,     2,     1,     0,     3,     0,     0,     0,
01755        6,     1,     1,     1,     1,     2,     1,     1,     1,     1,
01756        3,     1,     2,     1,     1,     1,     1,     1,     1,     1,
01757        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
01758        1,     1,     1,     1,     1,     1,     0,     4,     2,     3,
01759        0,     3,     4,     2,     2,     1,     2,     0,     6,     8,
01760        4,     6,     4,     6,     2,     4,     6,     2,     4,     2,
01761        4,     1,     0,     1,     1,     1,     1,     1,     1,     1,
01762        3,     1,     3,     1,     2,     1,     2,     1,     1,     3,
01763        1,     3,     1,     1,     2,     1,     3,     3,     1,     3,
01764        1,     3,     1,     1,     2,     1,     1,     1,     2,     2,
01765        1,     1,     0,     4,     1,     2,     1,     3,     3,     2,
01766        2,     1,     1,     1,     1,     1,     1,     1,     1,     1,
01767        1,     1,     1,     0,     1,     0,     1,     2,     2,     0,
01768        1,     1,     1,     1,     1,     2,     0
01769 };
01770 
01771 /* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM.
01772    Performed when YYTABLE doesn't specify something else to do.  Zero
01773    means the default is an error.  */
01774 static const yytype_uint16 yydefact[] =
01775 {
01776        2,     0,     0,     1,     0,   347,   348,   349,     0,   340,
01777      341,   342,   345,   343,   344,   346,   335,   336,   337,   338,
01778      298,   261,   261,   513,   512,   514,   515,   615,     0,   615,
01779       10,     0,   517,   516,   518,   601,   603,   509,   508,   602,
01780      511,   503,   504,   505,   506,   454,   523,   524,     0,     0,
01781        0,     0,   290,   626,   626,    84,   407,   480,   478,   480,
01782      482,   462,   474,   468,   476,     0,     0,     0,     3,   613,
01783        6,     9,    33,    44,    47,    55,   261,    54,     0,    72,
01784        0,    76,    86,     0,    52,   242,     0,   286,     0,     0,
01785      312,   315,   613,     0,     0,     0,     0,    56,   307,   275,
01786      276,   453,   455,   277,   278,   279,   281,   280,   282,   451,
01787      452,   450,   501,   519,   520,   283,     0,   284,    60,     5,
01788        8,   167,   178,   168,   191,   164,   184,   174,   173,   194,
01789      195,   189,   172,   171,   166,   192,   196,   197,   176,   165,
01790      179,   183,   185,   177,   170,   186,   193,   188,   187,   180,
01791      190,   175,   163,   182,   181,   162,   169,   160,   161,   157,
01792      158,   159,   115,   117,   116,   152,   153,   148,   130,   131,
01793      132,   139,   136,   138,   133,   134,   154,   155,   140,   141,
01794      145,   149,   135,   137,   127,   128,   129,   142,   143,   144,
01795      146,   147,   150,   151,   156,   120,   122,   124,    26,   118,
01796      119,   121,   123,     0,     0,     0,     0,     0,     0,     0,
01797        0,   256,     0,   243,   266,    70,   260,   626,     0,   519,
01798      520,     0,   284,   626,   596,    71,    69,   615,    68,     0,
01799      626,   431,    67,   615,   616,     0,     0,    21,   239,     0,
01800        0,   335,   336,   298,   301,   432,     0,   218,     0,   219,
01801      295,     0,    19,     0,     0,   613,    15,    18,   615,    74,
01802       14,   615,     0,     0,   619,   619,   244,     0,     0,   619,
01803      594,   615,     0,     0,     0,    82,   339,     0,    92,    93,
01804      100,   309,   408,   498,   497,   499,   496,     0,   495,     0,
01805        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
01806      502,    51,   233,   234,   622,   623,     4,   624,   614,     0,
01807        0,     0,     0,     0,     0,     0,   436,   434,   421,    61,
01808      306,   415,   417,     0,    88,     0,    80,    77,     0,     0,
01809        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
01810        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
01811        0,     0,     0,     0,     0,   429,   626,   427,     0,    53,
01812        0,     0,     0,     0,   613,     0,   614,     0,   361,   360,
01813        0,     0,   519,   520,   284,   110,   111,     0,     0,   113,
01814        0,     0,   519,   520,   284,   328,   187,   180,   190,   175,
01815      157,   158,   159,   115,   116,   592,   330,   591,     0,   612,
01816      611,     0,   308,   456,     0,     0,   125,   599,   295,   267,
01817      600,   263,     0,     0,     0,   257,   265,   429,   626,   427,
01818        0,     0,     0,   258,   615,     0,   300,   262,   615,   252,
01819      626,   626,   251,   615,   305,    50,    23,    25,    24,     0,
01820      302,     0,     0,     0,   429,   427,     0,    17,     0,   615,
01821      293,    13,   614,    73,   289,   291,   296,   621,   620,   245,
01822      621,   247,   297,   595,     0,    99,   502,    90,    85,     0,
01823      429,   626,   427,   552,   484,   487,   485,   500,   481,   457,
01824      479,   458,   459,   483,   460,   461,     0,   464,   470,     0,
01825      471,   466,   467,     0,   472,     0,   473,     0,   625,     7,
01826       27,    28,    29,    30,    31,    48,    49,   626,   626,    58,
01827       62,   626,     0,    34,   271,     0,    43,   270,   615,     0,
01828       78,    89,    46,    45,     0,   198,   266,    42,   216,   223,
01829      228,   229,   230,   225,   227,   237,   238,   231,   232,   209,
01830      210,   235,   236,   615,   224,   226,   220,   221,   222,   211,
01831      212,   213,   214,   215,   604,   606,   605,   607,     0,   261,
01832      426,   615,   604,   606,   605,   607,     0,   261,     0,   626,
01833      352,     0,   351,     0,     0,     0,     0,     0,     0,   295,
01834      429,   626,   427,   320,   325,   110,   111,   112,     0,   526,
01835      323,   525,   429,   626,   427,     0,     0,   530,   332,   604,
01836      605,   261,    35,   200,    41,   208,     0,   198,   598,     0,
01837      268,   264,   626,   604,   605,   615,   604,   605,   597,   299,
01838      617,   248,   253,   255,   304,    22,     0,   240,     0,    32,
01839      424,   422,   207,     0,    75,    16,   615,   619,     0,    83,
01840       96,    98,   615,   604,   605,   558,   555,   554,   553,   556,
01841      563,   572,     0,   583,   573,   587,   586,   582,   552,   409,
01842      551,   412,   557,   559,   561,   537,   565,   570,   626,   575,
01843      626,   580,   537,   585,   537,     0,   535,   488,     0,   463,
01844      465,   475,   469,   477,   217,   399,   615,     0,   397,   396,
01845        0,   626,     0,   274,     0,    87,    81,     0,     0,     0,
01846        0,     0,     0,   430,    65,     0,     0,   433,     0,     0,
01847      428,    63,   626,   350,   287,   626,   626,   442,   626,   353,
01848      626,   355,   313,   354,   316,     0,     0,   319,   608,   294,
01849      615,   604,   605,     0,     0,   528,     0,     0,   110,   111,
01850      114,   615,     0,   615,   552,     0,   552,     0,   250,   418,
01851       57,   249,     0,   126,   269,   259,     0,     0,   433,     0,
01852        0,   626,   615,    11,     0,   292,   246,    91,    94,     0,
01853      373,   364,   366,   615,   362,   615,     0,     0,     0,   544,
01854      564,     0,   533,   590,   574,     0,   534,     0,   547,   584,
01855        0,   549,   588,   489,   491,   492,   493,   486,   494,   395,
01856      615,     0,   559,   380,   567,   568,   626,   626,   578,   380,
01857      380,   378,   401,     0,     0,     0,     0,     0,   272,    79,
01858      199,     0,    40,   205,    39,   206,    66,   425,   618,     0,
01859       37,   203,    38,   204,    64,   423,   443,   444,   626,   445,
01860        0,   626,   358,     0,     0,   356,     0,     0,     0,   318,
01861        0,     0,   433,     0,   326,     0,     0,   433,   329,   593,
01862      615,     0,     0,   333,   419,   420,   201,     0,   254,   303,
01863       20,   615,     0,   371,     0,   560,     0,     0,     0,   410,
01864      576,   536,   562,   537,   537,   571,   626,   589,   537,   581,
01865      537,   559,   537,     0,     0,   398,     0,   386,   388,     0,
01866      566,     0,   376,   377,     0,   391,     0,   393,     0,   437,
01867      435,     0,   416,   273,   241,    36,   202,     0,     0,   447,
01868      359,     0,    12,   449,     0,   310,   311,     0,     0,   268,
01869      626,   321,     0,   527,   324,   529,   331,   531,   530,   363,
01870      374,     0,   369,   365,   411,     0,     0,     0,   540,     0,
01871      542,   532,     0,   548,     0,   545,   550,     0,   400,   577,
01872      379,   380,   380,   295,   429,   569,   626,   380,   579,   380,
01873      380,   405,   615,   403,   406,    59,     0,   446,     0,   101,
01874      102,   109,     0,   448,     0,   314,   317,   439,   440,   438,
01875        0,     0,     0,     0,   372,     0,   367,   414,   413,   537,
01876      537,   537,   537,   490,     0,   383,     0,   385,   608,   294,
01877      375,     0,   392,     0,   389,   394,     0,   402,   108,   429,
01878      626,   427,   626,   626,     0,   327,     0,   370,     0,   541,
01879        0,   538,   543,   546,   380,   380,   380,   380,   404,   608,
01880      107,   615,   604,   605,   441,   357,   322,   334,   368,   537,
01881      384,     0,   381,   387,   390,   433,   539,   380,   382
01882 };
01883 
01884 /* YYDEFGOTO[NTERM-NUM].  */
01885 static const yytype_int16 yydefgoto[] =
01886 {
01887       -1,     1,     2,    68,    69,    70,   239,   568,   569,   255,
01888      256,   448,   257,   439,    72,    73,   360,    74,    75,   510,
01889      691,   246,    77,    78,   258,    79,    80,    81,   468,    82,
01890      212,   379,   380,   195,   196,   197,   198,   606,   557,   200,
01891       84,   441,   214,   263,   231,   749,   428,   429,   228,   229,
01892      216,   415,   430,   516,   517,    85,   358,   261,   262,   636,
01893      626,   362,   847,   363,   848,   733,   990,   737,   734,   932,
01894      595,   597,   747,   938,   248,    87,    88,    89,    90,    91,
01895       92,    93,    94,    95,    96,   714,   571,   722,   844,   845,
01896      371,   771,   772,   773,   960,   898,   800,   687,   688,   801,
01897      972,   973,   281,   282,   473,   776,   659,   879,   322,   511,
01898       97,    98,   712,   705,   566,   558,   320,   508,   507,   578,
01899      989,   716,   838,   918,   922,    99,   100,   101,   102,   103,
01900      104,   105,   293,   486,   106,   297,   107,   108,   295,   299,
01901      289,   287,   291,   478,   678,   677,   793,   893,   797,   109,
01902      288,   110,   111,   112,   219,   220,   115,   221,   222,   590,
01903      736,   745,   746,   881,   779,   661,   662,   891,   664,   665,
01904      666,   667,   805,   806,   668,   669,   670,   671,   808,   809,
01905      672,   673,   674,   675,   676,   782,   398,   596,   268,   431,
01906      224,   118,   630,   560,   401,   306,   425,   426,   707,   459,
01907      572,   366,   260
01908 };
01909 
01910 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
01911    STATE-NUM.  */
01912 #define YYPACT_NINF -816
01913 static const yytype_int16 yypact[] =
01914 {
01915     -816,   132,  2698,  -816,  7384,  -816,  -816,  -816,  6899,  -816,
01916     -816,  -816,  -816,  -816,  -816,  -816,  7499,  7499,  -816,  -816,
01917     7499,  4040,  3629,  -816,  -816,  -816,  -816,   140,  6764,     0,
01918     -816,    27,  -816,  -816,  -816,  2944,  3766,  -816,  -816,  3081,
01919     -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,  8879,  8879,
01920      166,  5108,   288,  7844,  8189,  7162,  -816,  6629,  -816,  -816,
01921     -816,   105,   123,   177,   196,   941,  8994,  8879,  -816,    17,
01922     -816,   867,  -816,   484,  -816,  -816,    76,   294,   226,  -816,
01923      210,  9224,  -816,   237,  3060,   285,   311,  -816,  9109,  9109,
01924     -816,  -816,  6009,  9335,  9446,  9557,  6493,    30,    62,  -816,
01925     -816,   256,  -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,
01926     -816,  -816,  -816,   491,   593,  -816,   303,   616,  -816,  -816,
01927     -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,
01928     -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,
01929     -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,
01930     -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,
01931     -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,
01932     -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,
01933     -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,
01934     -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,   229,  -816,
01935     -816,  -816,  -816,   270,  8879,   359,  5249,  8879,  8879,  8879,
01936     8879,  -816,   310,  3060,   349,  -816,  -816,   322,   393,    34,
01937       38,   365,    63,   325,  -816,  -816,  -816,  5894,  -816,  7499,
01938     7499,  -816,  -816,  6124,  -816,  9109,   679,  -816,   309,   332,
01939     5390,  -816,  -816,  -816,   328,   361,    76,  -816,   421,   402,
01940      736,  7614,  -816,  5108,   362,    17,  -816,   867,     0,   408,
01941     -816,     0,  9109,   398,   -15,   180,  -816,   349,   429,   180,
01942     -816,     0,   502,   941,  9668,   440,  -816,   466,   563,   601,
01943      645,  -816,  -816,  -816,  -816,  -816,  -816,   425,  -816,   506,
01944      540,   545,   453,   575,   469,   101,   474,   658,   476,   222,
01945      522,  -816,  -816,  -816,  -816,  -816,  -816,  -816,  6239,  9109,
01946     9109,  9109,  9109,  7614,  9109,  9109,  -816,  -816,  -816,   498,
01947     -816,  -816,  -816,  8304,  -816,  5108,  7273,   460,  8304,  8879,
01948     8879,  8879,  8879,  8879,  8879,  8879,  8879,  8879,  8879,  8879,
01949     8879,  8879,  8879,  8879,  8879,  8879,  8879,  8879,  8879,  8879,
01950     8879,  8879,  8879,  8879,  8879,  9951,  7499, 10030,  4455,   484,
01951      113,   113,  9109,  9109,    17,   585,   472,   551,  -816,  -816,
01952      651,   595,    67,    88,    93,   487,   542,  9109,    78,  -816,
01953      114,   686,  -816,  -816,  -816,  -816,    48,    50,    60,   266,
01954      276,   289,   347,   380,   416,  -816,  -816,  -816,    30,  -816,
01955     -816, 10109,  -816,  -816,  8994,  8994,  -816,  -816,   240,  -816,
01956     -816,  -816,  8879,  8879,  7729,  -816,  -816, 10188,  7499, 10267,
01957     8879,  8879,  7959,  -816,     0,   494,  -816,  -816,     0,  -816,
01958      490,   500,  -816,   136,  -816,  -816,  -816,  -816,  -816,  6899,
01959     -816,  8879,  5523,   497, 10188, 10267,  8879,   867,   512,     0,
01960     -816,  -816,  6354,   528,  -816,   484,  -816,  8074,  -816,  -816,
01961     8189,  -816,  -816,  -816,   309,   703,  -816,  -816,   529,  9668,
01962    10346,  7499, 10425,  1091,  -816,  -816,  -816,  -816,  -816,  -816,
01963     -816,  -816,  -816,  -816,  -816,  -816,    35,  -816,  -816,   481,
01964     -816,  -816,  -816,    45,  -816,   521,  -816,  8879,  -816,  -816,
01965     -816,  -816,  -816,  -816,  -816,  -816,  -816,    70,    70,  -816,
01966     -816,    70,  8879,  -816,   536,   537,  -816,  -816,     0,  9668,
01967      557,  -816,  -816,  -816,   566,  3197,  -816,  -816,   402,  2451,
01968     2451,  2451,  2451,  1100,  1100,  2544,  2079,  2451,  2451,  3334,
01969     3334,   708,   708, 10928,  1100,  1100,   849,   849,   944,   385,
01970      385,   402,   402,   402,  4177,  3218,  4314,  3355,   361,   558,
01971     -816,     0,   760,  -816,   768,  -816,   361,  3903,   685,   693,
01972     -816,  4596,   689,  4878,    59,    59,   585,  8419,   685,   106,
01973    10504,  7499, 10583,  -816,   484,  -816,   703,  -816,    17,  -816,
01974     -816,  -816, 10662,  7499, 10109,  4455,  9109,   565,  -816,  -816,
01975     -816,  1231,  -816,  2786,  -816,  3060,  6899,  2923,  -816,  8879,
01976      349,  -816,   325,  2807,  3492,     0,   241,   306,  -816,  -816,
01977     -816,  -816,  7729,  7959,  -816,  -816,  9109,  3060,   576,  -816,
01978     -816,  -816,  3060,  5523,   278,  -816,     0,   180,  9668,   529,
01979      588,   351,     0,   334,   348,  -816,  -816,  -816,  -816,  -816,
01980     -816,  -816,   893,  -816,  -816,  -816,  -816,  -816,  1256,  -816,
01981     -816,  -816,  -816,   596,  -816,   581,  8879,  -816,   583,   672,
01982      589,  -816,   591,   682,   603,   702,  -816,  -816,   858,  -816,
01983     -816,  -816,  -816,  -816,   402,  -816,  1059,  5664,  -816,  -816,
01984     5390,    70,  5664,   620,  8534,  -816,   529,  9668,  8994,  8879,
01985      646,  8994,  8994,  -816,   498,   361,   625,   770,  8994,  8994,
01986     -816,   498,   361,  -816,  -816,  8649,   766,  -816,   527,  -816,
01987      766,  -816,  -816,  -816,  -816,   685,   228,  -816,    71,    89,
01988        0,   116,   125,  9109,    17,  -816,  9109,  4455,   588,   351,
01989     -816,     0,   685,   136,  1256,  4455,  1256,  7034,  -816,    62,
01990      294,  -816,  8879,  -816,  -816,  -816,  8879,  8879,   415,  8879,
01991     8879,   653,   136,  -816,   654,  -816,  -816,  -816,   318,   893,
01992      441,  -816,   659,     0,  -816,     0,   297,  8879,  1256,  -816,
01993     -816,   742,  -816,  -816,  -816,    58,  -816,  1256,  -816,  -816,
01994      772,  -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,
01995        0,   674,   683,   666,  9779,  -816,   667,   589,  -816,   673,
01996      677,  -816,   675,   807,   690,  5390,   812,  8879,   710,   529,
01997     3060,  8879,  -816,  3060,  -816,  3060,  -816,  -816,  -816,  8994,
01998     -816,  3060,  -816,  3060,  -816,  -816,   536,  -816,   757,  -816,
01999     4993,   845,  -816,  9109,   685,  -816,   685,  5664,  5664,  -816,
02000     8764,  4737,   126,    59,  -816,    17,   685,  -816,  -816,  -816,
02001        0,   685,    17,  -816,  -816,  -816,  3060,  8879,  7959,  -816,
02002     -816,     0,   942,   725,  1005,  -816,   723,  5664,  5390,  -816,
02003     -816,  -816,  -816,   733,   738,  -816,   589,  -816,   740,  -816,
02004      743,  -816,   740,  5779,   761,  -816,  9779,  1256,  -816,   830,
02005      709,   742,  -816,  -816,  1256,  -816,   772,  -816,  1080,  -816,
02006     -816,   754,  -816,   752,  3060,  -816,  3060,  9890,   113,  -816,
02007     -816,  5664,  -816,  -816,   113,  -816,  -816,   685,   685,  -816,
02008      171,  -816,  4455,  -816,  -816,  -816,  -816,  -816,   565,  -816,
02009      756,   942,   492,  -816,  -816,   880,   762,  1256,  -816,   772,
02010     -816,  -816,   772,  -816,   772,  -816,  -816,   789,  -816,   709,
02011     -816,   780,   782,  -816, 10741,  -816,   589,   784,  -816,   790,
02012      784,  -816,   225,  -816,  -816,  -816,   874,  -816,   721,   563,
02013      601,   645,  4455,  -816,  4596,  -816,  -816,  -816,  -816,  -816,
02014     5664,   685,  4455,   942,   756,   942,   797,  -816,  -816,   740,
02015      800,   740,   740,  -816,  1256,  -816,   772,  -816,   764,   799,
02016     -816,   772,  -816,   772,  -816,  -816,  1080,  -816,   703, 10820,
02017     7499, 10899,   693,   527,   685,  -816,   685,   756,   942,  -816,
02018      772,  -816,  -816,  -816,   784,   808,   784,   784,  -816,   253,
02019      351,     0,   148,   159,  -816,  -816,  -816,  -816,   756,   740,
02020     -816,   772,  -816,  -816,  -816,   169,  -816,   784,  -816
02021 };
02022 
02023 /* YYPGOTO[NTERM-NUM].  */
02024 static const yytype_int16 yypgoto[] =
02025 {
02026     -816,  -816,  -816,  -380,  -816,    23,  -816,  -566,   358,  -816,
02027      505,  -816,    20,  -816,  -308,   -42,   -75,    39,  -816,  -330,
02028     -816,   726,   -11,   850,  -141,     7,   -63,  -816,  -416,    16,
02029     1705,  -294,   859,   -55,  -816,   -16,  -816,  -816,     3,  -816,
02030     1056,  -816,  1763,  -816,    -6,   246,  -349,   122,     4,  -816,
02031     -374,  -200,    47,  -816,  -312,   -51,  -816,  -816,  -816,  -816,
02032     -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,  -816,
02033     -816,  -816,  -816,  -816,    74,  -816,  -816,  -816,  -816,  -816,
02034     -816,  -816,  -816,  -816,  -816,  -550,  -346,  -536,   -61,  -648,
02035     -816,  -787,  -765,   191,   277,    43,  -816,  -392,  -816,  -655,
02036     -816,   -48,  -816,  -816,  -816,  -816,  -816,  -816,   215,  -816,
02037     -816,  -816,  -816,  -816,  -816,  -816,   -90,  -816,  -816,  -551,
02038     -816,   -53,  -816,  -816,  -816,  -816,  -816,  -816,   877,  -816,
02039     -816,  -816,  -816,   684,  -816,  -816,  -816,  -816,  -816,  -816,
02040     -816,   924,  -816,  -196,  -816,  -816,  -816,  -816,  -816,    26,
02041     -816,    51,  -816,    -9,   846,  1250,   889,  1597,  1618,  -816,
02042     -816,    54,  -816,  -407,  -359,  -311,  -804,   957,  -693,  -447,
02043     -113,   205,    92,  -816,  -816,  -816,   -24,  -730,  -815,   110,
02044      230,  -816,  -654,  -816,  -146,  -609,  -816,  -816,  -816,    57,
02045     -385,  -816,  -336,  -816,   613,   -59,   -26,  -223,  -560,  -220,
02046      -56,    37,    -2
02047 };
02048 
02049 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
02050    positive, shift that token.  If negative, reduce the rule which
02051    number is the opposite.  If YYTABLE_NINF, syntax error.  */
02052 #define YYTABLE_NINF -627
02053 static const yytype_int16 yytable[] =
02054 {
02055      119,   235,   286,   238,   276,   211,   211,   561,   402,   211,
02056      434,   199,   237,   307,   361,   573,   527,   364,   327,   559,
02057      522,   567,    71,   423,    71,   725,   232,   120,   727,   742,
02058      276,   199,   810,   365,   201,   453,   307,   618,   454,   724,
02059      611,   396,   276,   276,   276,   461,   359,   359,   611,   463,
02060      359,   266,   270,   639,   201,   758,   300,   889,   259,   202,
02061      199,   786,   628,   217,   217,   601,   660,   217,   841,   615,
02062      318,   275,   846,   223,   223,   618,    86,   223,    86,   202,
02063      319,   559,   768,   567,   587,   882,   721,   943,   316,   968,
02064      218,   218,  -101,   480,   218,   483,  -105,   487,   474,   199,
02065      264,   487,   316,   696,   974,   301,   308,   940,   474,   631,
02066      265,   269,   449,  -102,  -107,   588,   690,   399,  -109,   692,
02067      876,   457,   642,  -521,   884,    86,   570,  -522,   458,   277,
02068      585,  -108,     3,   890,   586,  -513,   631,  -512,   215,   225,
02069      218,  -104,   226,   234,   475,   894,   476,  -514,   685,  -101,
02070     -106,  -103,   421,  -102,   475,   277,   476,   655,   304,   240,
02071      305,  -104,   218,   218,   489,   400,   218,   370,   381,   381,
02072      852,   856,  -106,   314,   315,   849,   994,   679,  -109,   861,
02073      656,   857,  -103,  -513,   518,  -512,   840,   682,   577,   968,
02074      686,   433,   858,   435,   317,  -514,   451,   902,   903,   307,
02075      304,   619,   305,   -92,   882,   621,   943,   -96,   317,  -604,
02076      624,   467,   974,   490,   230,   416,   211,   889,   211,   211,
02077      455,   416,   250,   276,   -93,   -98,   634,  -605,   432,  -100,
02078     1027,   423,   730,   589,   500,   501,   502,   503,   618,   803,
02079      318,   570,   -99,   962,   741,   464,   631,   292,   611,   611,
02080      969,   660,   -95,   764,   304,   304,   305,   305,   631,   882,
02081      259,   -97,   -94,  1048,   466,   294,  -105,   359,   359,   359,
02082      359,   447,   505,   506,   217,   276,   217,   951,   233,   234,
02083       86,   819,   987,   234,   223,   495,   223,   574,   575,  -104,
02084      680,  -104,   452,  1000,   925,   695,   926,   680,   740,   815,
02085     -106,   218,  -106,   218,   218,   576,   934,   218,   307,   218,
02086     -103,   936,  -103,   788,    86,   791,   460,   931,   882,   296,
02087      359,   359,   321,   458,   591,    86,   877,    86,    71,   446,
02088      759,   499,   259,   504,   496,   584,   218,   660,   298,   660,
02089      888,   323,   520,   892,  -433,   211,   324,   775,   277,   424,
02090     1035,   427,   328,  -515,   432,  -108,  -104,  1010,    58,   -95,
02091      565,  1016,   513,  -517,   850,   406,   991,   523,   234,   304,
02092      515,   305,  -339,   -97,   826,   515,  -516,   985,   986,   988,
02093      851,   834,    86,   218,   218,   218,   218,    86,   218,   218,
02094      522,  -604,   404,   -73,  -105,   760,  -105,   218,   355,    86,
02095      277,  -515,   218,   837,   565,  -433,   467,   211,   233,   254,
02096      878,  -517,   755,   765,   -87,   408,   432,   766,   276,  -339,
02097     -339,  -106,   565,   625,  -516,   412,  1026,  -288,   416,   416,
02098      218,  -288,    86,   860,  -518,   862,   218,   218,  -294,   413,
02099      119,  1025,   199,   602,   604,   356,   357,   440,   565,   -95,
02100     -433,   218,  -433,  -433,   420,   329,   467,   967,   414,   970,
02101      211,   422,    71,   -97,   442,   201,   227,  -507,   276,   432,
02102      -95,   612,   329,   -95,  1046,   565,  1047,   -95,   218,   218,
02103      417,  1055,  -518,   618,   -97,  -294,  -294,   -97,   474,  -605,
02104      202,   -97,   218,   645,   611,   646,   647,   648,   649,   230,
02105      999,   450,  1001,  -510,   867,   689,   689,  1002,   444,   689,
02106      352,   353,   354,  -601,   637,  -507,    86,   700,   723,   723,
02107      859,   314,   315,   -72,   948,   950,    86,   418,   419,   953,
02108     -103,   955,   735,   956,   475,   706,   476,   477,   456,   869,
02109      811,   843,   840,   277,   645,   218,   646,   647,   648,   649,
02110      875,  -510,   703,   470,   743,   418,   445,  1034,   465,  1036,
02111      710,   755,   462,   704,   254,   484,  1037,   717,  -602,   474,
02112      211,   711,   982,   804,  -507,   767,   469,   872,   984,   432,
02113     -521,   488,   211,  1049,   762,   565,   491,   276,   494,   706,
02114      753,   432,   497,   277,   509,   748,   521,   565,   443,   751,
02115      471,   472,   577,   474,  1057,   750,  -101,   579,   474,   199,
02116      416,   254,   482,   498,  -608,   475,   706,   476,   479,  -601,
02117      583,  -507,  -507,   681,   726,  -601,   622,   -92,   995,  -510,
02118      629,   119,   201,   620,   467,   887,   623,   935,   474,   887,
02119     1029,  1031,  1032,  1033,   633,    86,   276,    86,   939,   475,
02120     -519,   476,   481,    71,   475,   218,   476,   202,   853,   864,
02121      812,   855,   807,   683,   -87,   638,   783,   218,   783,    86,
02122      218,  1041,  -266,   694,  -602,  -608,  -510,  -510,   854,   761,
02123     -602,   698,  -522,   254,   475,   631,   476,   485,  -520,   689,
02124     1056,   359,   863,   697,   359,   713,  -424,  -519,  -519,   827,
02125      218,   715,   719,   744,   706,   405,   748,    86,  -102,   763,
02126      751,   777,   277,   839,   842,   706,   842,   778,   842,   781,
02127     -608,   474,  -608,  -608,   784,   785,  -604,   787,    76,   -93,
02128       76,  -109,  -284,   436,   789,  -520,  -520,   523,   580,   790,
02129      822,   824,    76,    76,   437,   438,    76,   830,   832,   812,
02130      199,   811,  -100,   276,   792,   887,  -267,   886,   811,   416,
02131      811,    86,   515,   821,    86,   828,    86,   475,   924,   476,
02132      492,   277,   218,   592,   812,   218,   218,    76,   329,  -284,
02133     -284,   840,   218,   218,   804,   581,   582,   870,   804,   868,
02134     -295,   804,    76,   804,   895,   874,   964,   723,   896,   933,
02135      650,   359,   897,   901,   783,   783,   937,   218,  1019,   904,
02136      218,    86,   651,   906,    76,    76,   908,   909,    76,    86,
02137      593,   594,   912,   910,   645,   446,   646,   647,   648,   649,
02138      650,   350,   351,   352,   353,   354,   919,  -295,  -295,   923,
02139      654,   655,   651,   593,   594,   276,  -268,   917,   113,   708,
02140      113,  -108,   905,   907,   921,  1020,  1021,   709,   811,   829,
02141      811,   941,   944,   652,   656,   811,   276,   811,   915,   947,
02142      654,   655,   -99,   807,   949,  -104,   952,   966,   900,   954,
02143      807,   958,   807,  -106,   783,  -103,   963,   975,  -269,    86,
02144      997,   804,   993,   804,   656,   998,   -95,   113,   804,  1003,
02145      804,   278,  -604,   218,   -97,   811,   -94,   309,   310,   311,
02146      312,   313,   794,   795,    86,   796,  1004,   218,  1006,   329,
02147     1011,    86,    86,    46,    47,    86,  1013,   278,   842,   718,
02148     1018,   720,    76,  1028,   342,   343,  1030,  -605,   804,   372,
02149      382,   382,   382,   368,  1051,   645,  1017,   646,   647,   648,
02150      649,    86,    86,    76,   385,    76,    76,   635,   835,    76,
02151      871,    76,  1045,   799,   783,   865,    76,    86,  1038,  1044,
02152      959,   349,   350,   351,   352,   353,   354,    76,   403,    76,
02153      807,   493,   807,   290,   769,   397,   885,   807,    76,   807,
02154      770,   978,   992,   965,   645,    86,   646,   647,   648,   649,
02155       41,    42,    43,    44,  1005,  1007,    86,   961,   883,   211,
02156     1012,   598,  1014,  1015,   329,   706,     0,     0,   432,     0,
02157      717,   842,     0,     0,   565,     0,     0,   807,     0,   342,
02158      343,     0,     0,   769,    76,    76,    76,    76,    76,    76,
02159       76,    76,     0,     0,     0,   813,     0,     0,   814,    76,
02160      816,    76,   113,     0,    76,     0,    86,   645,    86,   646,
02161      647,   648,   649,     0,    86,     0,    86,   350,   351,   352,
02162      353,   354,   213,   213,     0,     0,   213,  1050,  1052,  1053,
02163     1054,     0,    76,     0,    76,     0,   113,     0,    76,    76,
02164        0,     0,     0,     0,   218,     0,   769,   113,     0,   113,
02165     1058,     0,   942,    76,   247,   249,     0,     0,     0,   213,
02166      213,   645,     0,   646,   647,   648,   649,   650,     0,     0,
02167      278,     0,   302,   303,     0,     0,     0,     0,     0,   651,
02168       76,    76,   971,     0,   646,   647,   648,   649,     0,     0,
02169        0,     0,     0,   645,    76,   646,   647,   648,   649,   650,
02170      652,     0,     0,     0,   113,     0,   653,   654,   655,   113,
02171        0,   651,     0,     0,     0,     0,     0,     0,    76,     0,
02172      329,   113,   278,   911,     0,     0,     0,     0,    76,     0,
02173        0,   656,   652,     0,   657,   342,   343,     0,   653,   654,
02174      655,     0,     0,     0,     0,     0,     0,    76,   920,     0,
02175        0,     0,   234,     0,   113,   927,   928,     0,     0,   930,
02176        0,     0,     0,   656,     0,     0,   657,     0,     0,     0,
02177      347,   348,   349,   350,   351,   352,   353,   354,     0,   658,
02178        0,  -626,     0,     0,     0,   945,   946,     0,     0,  -626,
02179     -626,  -626,     0,     0,  -626,  -626,  -626,     0,  -626,     0,
02180        0,   957,   114,     0,   114,     0,     0,  -626,  -626,     0,
02181      213,     0,     0,   213,   213,   213,   302,     0,  -626,  -626,
02182        0,  -626,  -626,  -626,  -626,  -626,     0,     0,     0,   983,
02183        0,     0,     0,   213,     0,   213,   213,     0,   113,     0,
02184        0,     0,     0,     0,     0,     0,     0,    76,   113,    76,
02185        0,   114,     0,     0,     0,   279,     0,    76,   645,     0,
02186      646,   647,   648,   649,   650,   278,     0,     0,  -626,    76,
02187        0,    76,    76,     0,     0,     0,   651,     0,     0,     0,
02188        0,   279,     0,     0,     0,     0,     0,     0,     0,     0,
02189     1022,  -626,  1023,   373,   383,   383,   383,   652,  1024,     0,
02190        0,     0,    76,   653,   654,   655,     0,     0,     0,    76,
02191        0,     0,     0,  -626,  -626,   278,  -626,     0,     0,   230,
02192     -626,     0,  -626,     0,  -626,     0,     0,     0,   656,   213,
02193        0,   657,     0,     0,   525,   528,   529,   530,   531,   532,
02194      533,   534,   535,   536,   537,   538,   539,   540,   541,   542,
02195      543,   544,   545,   546,   547,   548,   549,   550,   551,   552,
02196      553,     0,   213,    76,     0,     0,    76,   113,    76,   113,
02197        0,     0,     0,     0,    76,     0,     0,    76,    76,     0,
02198      663,     0,     0,     0,    76,    76,     0,     0,     0,     0,
02199        0,   113,     0,     0,     0,     0,     0,     0,     0,     0,
02200        0,     0,     0,     0,     0,     0,   114,     0,     0,    76,
02201      603,   605,    76,    76,     0,     0,     0,     0,   607,   213,
02202      213,    76,     0,     0,   213,     0,   603,   605,   213,   113,
02203        0,     0,     0,     0,   278,     0,     0,     0,     0,     0,
02204      114,     0,     0,     0,     0,     0,     0,   627,     0,     0,
02205        0,   114,   632,   114,     0,     0,     0,     0,     0,     0,
02206        0,     0,     0,   213,     0,     0,   213,     0,     0,     0,
02207        0,     0,     0,     0,   279,     0,     0,   213,     0,     0,
02208        0,     0,     0,   113,     0,     0,   113,     0,   113,     0,
02209        0,    76,     0,   278,     0,     0,     0,     0,     0,     0,
02210        0,     0,     0,   684,     0,    76,     0,     0,   114,     0,
02211        0,     0,     0,   114,     0,     0,    76,     0,   213,    76,
02212        0,     0,     0,    76,    76,   114,   279,    76,     0,     0,
02213        0,     0,     0,   113,     0,     0,     0,     0,     0,     0,
02214        0,   113,     0,     0,     0,     0,     0,     0,     0,   116,
02215        0,   116,     0,    76,    76,     0,     0,     0,   114,   774,
02216        0,     0,     0,     0,     0,   663,     0,     0,     0,    76,
02217      117,     0,   117,     0,     0,     0,     0,     0,     0,     0,
02218        0,     0,     0,   213,     0,     0,     0,   213,     0,     0,
02219        0,     0,     0,   802,     0,     0,     0,    76,   116,   213,
02220      382,     0,     0,     0,     0,     0,     0,     0,    76,     0,
02221        0,   113,     0,     0,     0,   213,     0,     0,     0,   117,
02222        0,     0,     0,   280,     0,     0,     0,     0,   213,   213,
02223        0,     0,     0,     0,     0,     0,   113,     0,     0,     0,
02224        0,     0,   114,   113,   113,     0,     0,   113,     0,   280,
02225        0,   663,   114,   663,     0,     0,     0,    83,    76,    83,
02226       76,   374,   384,   384,     0,     0,    76,     0,    76,   279,
02227        0,     0,   213,   113,   113,     0,   774,   873,     0,     0,
02228        0,     0,     0,     0,     0,   663,     0,     0,     0,   113,
02229        0,     0,   382,     0,   663,     0,    76,     0,     0,     0,
02230      213,     0,     0,     0,   607,   820,    83,   823,   825,     0,
02231        0,     0,     0,   979,   831,   833,     0,   113,     0,   279,
02232        0,   213,     0,     0,     0,     0,     0,     0,   113,     0,
02233        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02234        0,     0,     0,     0,     0,     0,     0,     0,   369,     0,
02235        0,     0,     0,   116,     0,     0,     0,     0,   866,     0,
02236        0,     0,   823,   825,     0,   831,   833,   267,     0,     0,
02237        0,   114,     0,   114,   117,     0,     0,     0,   113,   774,
02238      113,   774,     0,   213,     0,     0,   113,   116,   113,     0,
02239        0,     0,     0,     0,     0,   114,     0,     0,   116,     0,
02240      116,     0,     0,     0,   802,     0,     0,     0,   117,     0,
02241        0,   802,     0,     0,     0,     0,     0,     0,     0,   117,
02242        0,   117,     0,   213,     0,     0,     0,   914,     0,     0,
02243        0,     0,     0,   114,     0,   916,     0,     0,   279,     0,
02244        0,     0,   280,     0,     0,     0,     0,     0,   774,   996,
02245        0,     0,     0,     0,   663,   116,   213,     0,     0,     0,
02246      116,    83,     0,     0,     0,     0,     0,     0,     0,     0,
02247        0,     0,   116,   916,   213,     0,   117,     0,     0,     0,
02248        0,   117,     0,     0,     0,     0,     0,   114,     0,     0,
02249      114,     0,   114,   117,   280,    83,     0,   279,     0,     0,
02250      774,     0,   774,     0,     0,   116,    83,     0,    83,     0,
02251        0,   802,     0,     0,     0,     0,     0,   407,     0,     0,
02252      409,   410,   411,     0,     0,     0,   117,     0,     0,     0,
02253        0,     0,     0,     0,     0,   774,     0,   114,     0,     0,
02254        0,     0,     0,     0,     0,   114,     0,     0,     0,     0,
02255        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02256        0,     0,     0,    83,     0,     0,     0,     0,    83,     0,
02257        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02258       83,     0,     0,   524,     0,     0,     0,     0,     0,   116,
02259        0,     0,     0,     0,     0,     0,     0,     0,     0,   116,
02260        0,     0,     0,     0,   383,     0,     0,     0,     0,     0,
02261      117,     0,     0,    83,     0,   114,     0,     0,     0,     0,
02262      117,     0,     0,     0,     0,     0,   213,     0,     0,     0,
02263        0,     0,     0,     0,     0,     0,   514,   280,     0,     0,
02264      114,   526,     0,     0,     0,     0,     0,   114,   114,     0,
02265        0,   114,     0,     0,     0,     0,     0,     0,     0,     0,
02266        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02267        0,     0,     0,     0,     0,     0,     0,   114,   114,     0,
02268        0,     0,     0,     0,     0,     0,     0,   280,     0,     0,
02269        0,     0,     0,   114,     0,     0,   383,    83,     0,   329,
02270      330,   331,   332,   333,   334,   335,   336,    83,   338,   339,
02271        0,     0,     0,     0,   342,   343,     0,   980,   116,     0,
02272      116,   114,     0,     0,     0,     0,   608,   610,     0,     0,
02273        0,     0,   114,     0,     0,   267,     0,     0,     0,   117,
02274        0,   117,   116,     0,     0,     0,     0,   345,   346,   347,
02275      348,   349,   350,   351,   352,   353,   354,     0,     0,     0,
02276        0,     0,     0,   117,     0,     0,     0,     0,     0,     0,
02277      610,     0,     0,   267,     0,     0,     0,     0,     0,     0,
02278      116,     0,   114,     0,   114,     0,     0,     0,     0,     0,
02279      114,     0,   114,     0,     0,     0,     0,     0,     0,     0,
02280        0,   117,     0,     0,     0,     0,   280,     0,     0,     0,
02281        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02282        0,     0,     0,     0,     0,   693,    83,     0,    83,     0,
02283        0,     0,     0,     0,   116,     0,     0,   116,     0,   116,
02284        0,     0,     0,     0,     0,     0,   798,     0,     0,     0,
02285       83,     0,     0,     0,     0,   117,     0,     0,   117,     0,
02286      117,     0,     0,     0,     0,   280,     0,     0,     0,     0,
02287        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02288        0,     0,     0,     0,   116,     0,     0,     0,    83,     0,
02289      526,     0,   116,     0,     0,     0,     0,     0,     0,     0,
02290        0,     0,     0,     0,     0,   117,     0,     0,     0,     0,
02291        0,     0,     0,   117,     0,     0,     0,     0,     0,     0,
02292        0,     0,   754,     0,     0,     0,     0,     0,     0,     0,
02293        0,     0,     0,     0,     0,   610,   267,     0,     0,     0,
02294        0,     0,    83,     0,     0,    83,     0,    83,     0,     0,
02295        0,     0,     0,   524,     0,     0,     0,     0,     0,     0,
02296        0,     0,   116,     0,     0,     0,     0,     0,     0,     0,
02297        0,     0,   384,     0,     0,     0,     0,     0,     0,   780,
02298        0,     0,     0,   117,     0,     0,     0,   116,     0,     0,
02299        0,     0,    83,     0,   116,   116,     0,     0,   116,     0,
02300       83,     0,     0,     0,     0,     0,     0,   818,   117,     0,
02301        0,     0,     0,     0,     0,   117,   117,     0,     0,   117,
02302        0,     0,     0,     0,   116,   116,     0,     0,   836,     0,
02303        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02304      116,     0,     0,     0,     0,   117,   117,     0,     0,     0,
02305        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02306        0,   117,     0,     0,   384,     0,     0,     0,   116,     0,
02307       83,   329,  -627,  -627,  -627,  -627,   334,   335,     0,   116,
02308     -627,  -627,     0,     0,     0,   981,   342,   343,     0,   117,
02309      880,     0,     0,     0,     0,    83,     0,     0,     0,     0,
02310      117,     0,    83,    83,     0,     0,    83,     0,     0,     0,
02311        0,     0,     0,     0,     0,     0,     0,     0,     0,   345,
02312      346,   347,   348,   349,   350,   351,   352,   353,   354,   116,
02313      913,   116,    83,    83,     0,     0,     0,   116,     0,   116,
02314        0,     0,     0,     0,     0,     0,     0,     0,    83,     0,
02315      117,     0,   117,     0,     0,     0,     0,     0,   117,     0,
02316      117,     0,     0,   929,   329,   330,   331,   332,   333,   334,
02317      335,     0,   977,   338,   339,     0,    83,     0,     0,   342,
02318      343,   267,     0,     0,     0,     0,     0,    83,     0,     0,
02319        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02320        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02321        0,     0,   345,   346,   347,   348,   349,   350,   351,   352,
02322      353,   354,     0,     0,     0,     0,     0,     0,     0,     0,
02323        0,     0,     0,     0,     0,     0,     0,    83,     0,    83,
02324        0,     0,     0,     0,     0,    83,     0,    83,  -626,     4,
02325        0,     5,     6,     7,     8,     9,     0,     0,     0,    10,
02326       11,     0,     0,     0,    12,     0,    13,    14,    15,    16,
02327       17,    18,    19,     0,     0,     0,     0,     0,    20,    21,
02328       22,    23,    24,    25,    26,     0,     0,    27,     0,     0,
02329        0,     0,     0,    28,    29,    30,    31,    32,    33,    34,
02330       35,    36,    37,    38,    39,    40,     0,    41,    42,    43,
02331       44,     0,    45,    46,    47,     0,    48,    49,     0,     0,
02332        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02333        0,     0,     0,     0,     0,     0,    50,     0,     0,    51,
02334       52,     0,    53,    54,     0,    55,     0,     0,    56,    57,
02335       58,    59,    60,    61,    62,    63,    64,  -608,     0,     0,
02336        0,     0,     0,     0,     0,  -608,  -608,  -608,     0,     0,
02337     -608,  -608,  -608,     0,  -608,     0,    65,    66,    67,     0,
02338      752,     0,     0,  -608,  -608,  -608,  -608,     0,     0,  -626,
02339        0,  -626,     0,     0,  -608,  -608,     0,  -608,  -608,  -608,
02340     -608,  -608,     0,     0,     0,     0,   329,   330,   331,   332,
02341      333,   334,   335,   336,   337,   338,   339,   340,   341,     0,
02342        0,   342,   343,     0,     0,     0,     0,  -608,  -608,  -608,
02343     -608,  -608,  -608,  -608,  -608,  -608,  -608,  -608,  -608,  -608,
02344        0,     0,  -608,  -608,  -608,     0,   756,  -608,     0,     0,
02345        0,     0,   344,  -608,   345,   346,   347,   348,   349,   350,
02346      351,   352,   353,   354,     0,     0,     0,  -608,     0,     0,
02347     -608,     0,  -105,  -608,  -608,  -608,  -608,  -608,  -608,  -608,
02348     -608,  -608,  -608,  -608,  -608,     0,     0,     0,     0,  -608,
02349     -608,  -608,  -608,  -608,  -507,     0,  -608,  -608,  -608,     0,
02350     -608,     0,  -507,  -507,  -507,     0,     0,  -507,  -507,  -507,
02351        0,  -507,     0,     0,     0,     0,     0,   699,     0,  -507,
02352        0,  -507,  -507,  -507,     0,     0,     0,     0,     0,     0,
02353        0,  -507,  -507,     0,  -507,  -507,  -507,  -507,  -507,     0,
02354        0,     0,     0,   329,   330,   331,   332,   333,   334,   335,
02355      336,   337,   338,   339,   340,   341,     0,     0,   342,   343,
02356        0,     0,     0,     0,  -507,  -507,  -507,  -507,  -507,  -507,
02357     -507,  -507,  -507,  -507,  -507,  -507,  -507,     0,     0,  -507,
02358     -507,  -507,     0,  -507,  -507,     0,     0,     0,     0,   344,
02359     -507,   345,   346,   347,   348,   349,   350,   351,   352,   353,
02360      354,     0,     0,     0,  -507,     0,     0,  -507,     0,  -507,
02361     -507,  -507,  -507,  -507,  -507,  -507,  -507,  -507,  -507,  -507,
02362     -507,  -507,     0,     0,     0,     0,     0,  -507,  -507,  -507,
02363     -507,  -510,     0,  -507,  -507,  -507,     0,  -507,     0,  -510,
02364     -510,  -510,     0,     0,  -510,  -510,  -510,     0,  -510,     0,
02365        0,     0,     0,     0,     0,     0,  -510,     0,  -510,  -510,
02366     -510,     0,     0,     0,     0,     0,     0,     0,  -510,  -510,
02367        0,  -510,  -510,  -510,  -510,  -510,     0,     0,     0,     0,
02368      329,   330,   331,   332,   333,   334,   335,   336,   337,   338,
02369      339,   340,   341,     0,     0,   342,   343,     0,     0,     0,
02370        0,  -510,  -510,  -510,  -510,  -510,  -510,  -510,  -510,  -510,
02371     -510,  -510,  -510,  -510,     0,     0,  -510,  -510,  -510,     0,
02372     -510,  -510,     0,     0,     0,     0,   344,  -510,   345,   346,
02373      347,   348,   349,   350,   351,   352,   353,   354,     0,     0,
02374        0,  -510,     0,     0,  -510,     0,  -510,  -510,  -510,  -510,
02375     -510,  -510,  -510,  -510,  -510,  -510,  -510,  -510,  -510,     0,
02376        0,     0,     0,     0,  -510,  -510,  -510,  -510,  -609,     0,
02377     -510,  -510,  -510,     0,  -510,     0,  -609,  -609,  -609,     0,
02378        0,  -609,  -609,  -609,     0,  -609,     0,     0,     0,     0,
02379        0,   699,     0,     0,  -609,  -609,  -609,  -609,     0,     0,
02380        0,     0,     0,     0,     0,  -609,  -609,     0,  -609,  -609,
02381     -609,  -609,  -609,     0,     0,     0,     0,   329,   330,   331,
02382      332,   333,   334,   335,   336,   337,   338,   339,   340,   341,
02383        0,     0,   342,   343,     0,     0,     0,     0,  -609,  -609,
02384     -609,  -609,  -609,  -609,  -609,  -609,  -609,  -609,  -609,  -609,
02385     -609,     0,     0,  -609,  -609,  -609,     0,     0,  -609,     0,
02386        0,     0,     0,   344,  -609,   345,   346,   347,   348,   349,
02387      350,   351,   352,   353,   354,     0,     0,     0,  -609,     0,
02388        0,  -609,     0,  -243,  -609,  -609,  -609,  -609,  -609,  -609,
02389     -609,  -609,  -609,  -609,  -609,  -609,     0,     0,     0,     0,
02390     -609,  -609,  -609,  -609,  -609,  -610,     0,  -609,  -609,  -609,
02391        0,  -609,     0,  -610,  -610,  -610,     0,     0,  -610,  -610,
02392     -610,     0,  -610,     0,     0,     0,     0,     0,     0,     0,
02393        0,  -610,  -610,  -610,  -610,     0,     0,     0,     0,     0,
02394        0,     0,  -610,  -610,     0,  -610,  -610,  -610,  -610,  -610,
02395        0,     0,     0,     0,   329,   330,   331,   332,   333,   334,
02396      335,   336,   337,   338,   339,  -627,  -627,     0,     0,   342,
02397      343,     0,     0,     0,     0,  -610,  -610,  -610,  -610,  -610,
02398     -610,  -610,  -610,  -610,  -610,  -610,  -610,  -610,     0,     0,
02399     -610,  -610,  -610,     0,     0,  -610,     0,     0,     0,     0,
02400        0,  -610,   345,   346,   347,   348,   349,   350,   351,   352,
02401      353,   354,     0,     0,     0,  -610,     0,     0,  -610,     0,
02402        0,  -610,  -610,  -610,  -610,  -610,  -610,  -610,  -610,  -610,
02403     -610,  -610,  -610,     0,     0,     0,     0,  -610,  -610,  -610,
02404     -610,  -610,  -294,     0,  -610,  -610,  -610,     0,  -610,     0,
02405     -294,  -294,  -294,     0,     0,  -294,  -294,  -294,     0,  -294,
02406        0,     0,     0,     0,     0,     0,     0,     0,     0,  -294,
02407     -294,  -294,     0,     0,     0,     0,     0,     0,     0,  -294,
02408     -294,     0,  -294,  -294,  -294,  -294,  -294,     0,     0,     0,
02409        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02410        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02411        0,     0,  -294,  -294,  -294,  -294,  -294,  -294,  -294,  -294,
02412     -294,  -294,  -294,  -294,  -294,     0,     0,  -294,  -294,  -294,
02413        0,   757,  -294,     0,     0,     0,     0,     0,  -294,     0,
02414        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02415        0,     0,  -294,     0,     0,  -294,     0,  -107,  -294,  -294,
02416     -294,  -294,  -294,  -294,  -294,  -294,  -294,  -294,  -294,  -294,
02417        0,     0,     0,     0,     0,  -294,  -294,  -294,  -294,  -432,
02418        0,  -294,  -294,  -294,     0,  -294,     0,  -432,  -432,  -432,
02419        0,     0,  -432,  -432,  -432,     0,  -432,     0,     0,     0,
02420        0,     0,     0,     0,     0,  -432,  -432,  -432,     0,     0,
02421        0,     0,     0,     0,     0,     0,  -432,  -432,     0,  -432,
02422     -432,  -432,  -432,  -432,     0,     0,     0,     0,     0,     0,
02423        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02424        0,     0,     0,     0,     0,     0,     0,     0,     0,  -432,
02425     -432,  -432,  -432,  -432,  -432,  -432,  -432,  -432,  -432,  -432,
02426     -432,  -432,     0,     0,  -432,  -432,  -432,     0,     0,  -432,
02427        0,     0,     0,     0,     0,  -432,     0,     0,     0,     0,
02428        0,     0,     0,     0,     0,     0,     0,     0,     0,  -432,
02429        0,     0,     0,     0,     0,  -432,     0,  -432,  -432,  -432,
02430     -432,  -432,  -432,  -432,  -432,  -432,  -432,     0,     0,     0,
02431        0,  -432,  -432,  -432,  -432,  -432,  -285,   230,  -432,  -432,
02432     -432,     0,  -432,     0,  -285,  -285,  -285,     0,     0,  -285,
02433     -285,  -285,     0,  -285,     0,     0,     0,     0,     0,     0,
02434        0,     0,     0,  -285,  -285,  -285,     0,     0,     0,     0,
02435        0,     0,     0,  -285,  -285,     0,  -285,  -285,  -285,  -285,
02436     -285,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02437        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02438        0,     0,     0,     0,     0,     0,  -285,  -285,  -285,  -285,
02439     -285,  -285,  -285,  -285,  -285,  -285,  -285,  -285,  -285,     0,
02440        0,  -285,  -285,  -285,     0,     0,  -285,     0,     0,     0,
02441        0,     0,  -285,     0,     0,     0,     0,     0,     0,     0,
02442        0,     0,     0,     0,     0,     0,  -285,     0,     0,  -285,
02443        0,     0,  -285,  -285,  -285,  -285,  -285,  -285,  -285,  -285,
02444     -285,  -285,  -285,  -285,     0,     0,     0,     0,     0,  -285,
02445     -285,  -285,  -285,  -422,     0,  -285,  -285,  -285,     0,  -285,
02446        0,  -422,  -422,  -422,     0,     0,  -422,  -422,  -422,     0,
02447     -422,     0,     0,     0,     0,     0,     0,     0,     0,  -422,
02448     -422,  -422,     0,     0,     0,     0,     0,     0,     0,     0,
02449     -422,  -422,     0,  -422,  -422,  -422,  -422,  -422,     0,     0,
02450        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02451        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02452        0,     0,     0,  -422,  -422,  -422,  -422,  -422,  -422,  -422,
02453     -422,  -422,  -422,  -422,  -422,  -422,     0,     0,  -422,  -422,
02454     -422,     0,     0,  -422,     0,     0,     0,     0,     0,  -422,
02455        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02456        0,     0,     0,  -422,     0,     0,     0,     0,     0,  -422,
02457        0,  -422,  -422,  -422,  -422,  -422,  -422,  -422,  -422,  -422,
02458     -422,     0,     0,     0,     0,  -422,  -422,  -422,  -422,  -422,
02459     -301,  -422,  -422,  -422,  -422,     0,  -422,     0,  -301,  -301,
02460     -301,     0,     0,  -301,  -301,  -301,     0,  -301,     0,     0,
02461        0,     0,     0,     0,     0,     0,     0,  -301,  -301,     0,
02462        0,     0,     0,     0,     0,     0,     0,  -301,  -301,     0,
02463     -301,  -301,  -301,  -301,  -301,     0,     0,     0,     0,     0,
02464        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02465        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02466     -301,  -301,  -301,  -301,  -301,  -301,  -301,  -301,  -301,  -301,
02467     -301,  -301,  -301,     0,     0,  -301,  -301,  -301,     0,     0,
02468     -301,     0,     0,     0,     0,     0,  -301,     0,     0,     0,
02469        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02470     -301,     0,     0,     0,     0,     0,  -301,     0,  -301,  -301,
02471     -301,  -301,  -301,  -301,  -301,  -301,  -301,  -301,     0,     0,
02472        0,     0,     0,  -301,  -301,  -301,  -301,  -608,   227,  -301,
02473     -301,  -301,     0,  -301,     0,  -608,  -608,  -608,     0,     0,
02474        0,  -608,  -608,     0,  -608,     0,     0,     0,     0,     0,
02475        0,     0,     0,  -608,     0,     0,     0,     0,     0,     0,
02476        0,     0,     0,     0,  -608,  -608,     0,  -608,  -608,  -608,
02477     -608,  -608,     0,     0,     0,     0,     0,     0,     0,     0,
02478        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02479        0,     0,     0,     0,     0,     0,     0,  -608,  -608,  -608,
02480     -608,  -608,  -608,  -608,  -608,  -608,  -608,  -608,  -608,  -608,
02481        0,     0,  -608,  -608,  -608,     0,   701,     0,     0,     0,
02482        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02483        0,     0,     0,     0,     0,     0,     0,  -608,     0,     0,
02484        0,     0,  -105,  -608,     0,  -608,  -608,  -608,  -608,  -608,
02485     -608,  -608,  -608,  -608,  -608,     0,     0,     0,     0,  -608,
02486     -608,  -608,  -608,   -96,  -294,     0,  -608,     0,  -608,     0,
02487     -608,     0,  -294,  -294,  -294,     0,     0,     0,  -294,  -294,
02488        0,  -294,     0,     0,     0,     0,     0,     0,     0,     0,
02489        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02490        0,  -294,  -294,     0,  -294,  -294,  -294,  -294,  -294,     0,
02491        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02492        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02493        0,     0,     0,     0,  -294,  -294,  -294,  -294,  -294,  -294,
02494     -294,  -294,  -294,  -294,  -294,  -294,  -294,     0,     0,  -294,
02495     -294,  -294,     0,   702,     0,     0,     0,     0,     0,     0,
02496        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02497        0,     0,     0,     0,  -294,     0,     0,     0,     0,  -107,
02498     -294,     0,  -294,  -294,  -294,  -294,  -294,  -294,  -294,  -294,
02499     -294,  -294,     0,     0,     0,     0,     0,  -294,  -294,  -294,
02500      -98,     0,     0,  -294,     0,  -294,   251,  -294,     5,     6,
02501        7,     8,     9,  -626,  -626,  -626,    10,    11,     0,     0,
02502     -626,    12,     0,    13,    14,    15,    16,    17,    18,    19,
02503        0,     0,     0,     0,     0,    20,    21,    22,    23,    24,
02504       25,    26,     0,     0,    27,     0,     0,     0,     0,     0,
02505       28,    29,   252,    31,    32,    33,    34,    35,    36,    37,
02506       38,    39,    40,     0,    41,    42,    43,    44,     0,    45,
02507       46,    47,     0,    48,    49,     0,     0,     0,     0,     0,
02508        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02509        0,     0,     0,    50,     0,     0,    51,    52,     0,    53,
02510       54,     0,    55,     0,     0,    56,    57,    58,    59,    60,
02511       61,    62,    63,    64,     0,     0,     0,     0,     0,     0,
02512        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02513        0,     0,     0,    65,    66,    67,     0,     0,     0,     0,
02514        0,     0,     0,     0,     0,     0,  -626,   251,  -626,     5,
02515        6,     7,     8,     9,     0,     0,  -626,    10,    11,     0,
02516     -626,  -626,    12,     0,    13,    14,    15,    16,    17,    18,
02517       19,     0,     0,     0,     0,     0,    20,    21,    22,    23,
02518       24,    25,    26,     0,     0,    27,     0,     0,     0,     0,
02519        0,    28,    29,   252,    31,    32,    33,    34,    35,    36,
02520       37,    38,    39,    40,     0,    41,    42,    43,    44,     0,
02521       45,    46,    47,     0,    48,    49,     0,     0,     0,     0,
02522        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02523        0,     0,     0,     0,    50,     0,     0,    51,    52,     0,
02524       53,    54,     0,    55,     0,     0,    56,    57,    58,    59,
02525       60,    61,    62,    63,    64,     0,     0,     0,     0,     0,
02526        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02527        0,     0,     0,     0,    65,    66,    67,     0,     0,     0,
02528        0,     0,     0,     0,     0,     0,     0,  -626,   251,  -626,
02529        5,     6,     7,     8,     9,     0,     0,  -626,    10,    11,
02530        0,     0,  -626,    12,  -626,    13,    14,    15,    16,    17,
02531       18,    19,     0,     0,     0,     0,     0,    20,    21,    22,
02532       23,    24,    25,    26,     0,     0,    27,     0,     0,     0,
02533        0,     0,    28,    29,   252,    31,    32,    33,    34,    35,
02534       36,    37,    38,    39,    40,     0,    41,    42,    43,    44,
02535        0,    45,    46,    47,     0,    48,    49,     0,     0,     0,
02536        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02537        0,     0,     0,     0,     0,    50,     0,     0,    51,    52,
02538        0,    53,    54,     0,    55,     0,     0,    56,    57,    58,
02539       59,    60,    61,    62,    63,    64,     0,     0,     0,     0,
02540        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02541        0,     0,     0,     0,     0,    65,    66,    67,     0,     0,
02542        0,     0,     0,     0,     0,     0,     0,     0,  -626,   251,
02543     -626,     5,     6,     7,     8,     9,     0,     0,  -626,    10,
02544       11,     0,     0,  -626,    12,     0,    13,    14,    15,    16,
02545       17,    18,    19,     0,     0,     0,     0,     0,    20,    21,
02546       22,    23,    24,    25,    26,     0,     0,    27,     0,     0,
02547        0,     0,     0,    28,    29,   252,    31,    32,    33,    34,
02548       35,    36,    37,    38,    39,    40,     0,    41,    42,    43,
02549       44,     0,    45,    46,    47,     0,    48,    49,     0,     0,
02550        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02551        0,     0,     0,     0,     0,     0,    50,     0,     0,    51,
02552       52,     0,    53,    54,     0,    55,     0,     0,    56,    57,
02553       58,    59,    60,    61,    62,    63,    64,     0,     0,     0,
02554        0,     0,     0,     0,   251,     0,     5,     6,     7,     8,
02555        9,     0,  -626,  -626,    10,    11,    65,    66,    67,    12,
02556        0,    13,    14,    15,    16,    17,    18,    19,     0,  -626,
02557        0,  -626,     0,    20,    21,    22,    23,    24,    25,    26,
02558        0,     0,    27,     0,     0,     0,     0,     0,    28,    29,
02559      252,    31,    32,    33,    34,    35,    36,    37,    38,    39,
02560       40,     0,    41,    42,    43,    44,     0,    45,    46,    47,
02561        0,    48,    49,     0,     0,     0,     0,     0,     0,     0,
02562        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02563        0,    50,     0,     0,    51,    52,     0,    53,    54,     0,
02564       55,     0,     0,    56,    57,    58,    59,    60,    61,    62,
02565       63,    64,     0,     0,     0,     0,     0,     0,     0,   251,
02566        0,     5,     6,     7,     8,     9,     0,     0,     0,    10,
02567       11,    65,    66,    67,    12,     0,    13,    14,    15,    16,
02568       17,    18,    19,     0,  -626,     0,  -626,     0,    20,    21,
02569       22,    23,    24,    25,    26,     0,     0,    27,     0,     0,
02570        0,     0,     0,    28,    29,   252,    31,    32,    33,    34,
02571       35,    36,    37,    38,    39,    40,     0,    41,    42,    43,
02572       44,     0,    45,    46,    47,     0,    48,    49,     0,     0,
02573        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02574        0,     0,     0,     0,     0,     0,    50,     0,     0,   253,
02575       52,     0,    53,    54,     0,    55,     0,     0,    56,    57,
02576       58,    59,    60,    61,    62,    63,    64,     0,     0,     0,
02577        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02578        0,     0,     0,     0,     0,     0,    65,    66,    67,     0,
02579        0,     0,     0,     0,     0,     0,     0,  -626,     0,  -626,
02580      251,  -626,     5,     6,     7,     8,     9,     0,     0,     0,
02581       10,    11,     0,     0,     0,    12,     0,    13,    14,    15,
02582       16,    17,    18,    19,     0,     0,     0,     0,     0,    20,
02583       21,    22,    23,    24,    25,    26,     0,     0,    27,     0,
02584        0,     0,     0,     0,    28,    29,   252,    31,    32,    33,
02585       34,    35,    36,    37,    38,    39,    40,     0,    41,    42,
02586       43,    44,     0,    45,    46,    47,     0,    48,    49,     0,
02587        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02588        0,     0,     0,     0,     0,     0,     0,    50,     0,     0,
02589       51,    52,     0,    53,    54,     0,    55,     0,     0,    56,
02590       57,    58,    59,    60,    61,    62,    63,    64,     0,     0,
02591        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02592        0,     0,     0,     0,     0,     0,     0,    65,    66,    67,
02593        0,     0,     0,     0,     0,     0,     0,     0,  -626,     0,
02594     -626,   251,  -626,     5,     6,     7,     8,     9,     0,     0,
02595        0,    10,    11,     0,     0,     0,    12,     0,    13,    14,
02596       15,    16,    17,    18,    19,     0,     0,     0,     0,     0,
02597       20,    21,    22,    23,    24,    25,    26,     0,     0,    27,
02598        0,     0,     0,     0,     0,    28,    29,   252,    31,    32,
02599       33,    34,    35,    36,    37,    38,    39,    40,     0,    41,
02600       42,    43,    44,     0,    45,    46,    47,     0,    48,    49,
02601        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02602        0,     0,     0,     0,     0,     0,     0,     0,    50,     0,
02603        0,    51,    52,     0,    53,    54,     0,    55,     0,     0,
02604       56,    57,    58,    59,    60,    61,    62,    63,    64,     0,
02605        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02606        0,     0,     0,     0,     0,     0,     0,     0,    65,    66,
02607       67,     0,     0,  -626,     4,     0,     5,     6,     7,     8,
02608        9,  -626,     0,  -626,    10,    11,     0,     0,     0,    12,
02609        0,    13,    14,    15,    16,    17,    18,    19,     0,     0,
02610        0,     0,     0,    20,    21,    22,    23,    24,    25,    26,
02611        0,     0,    27,     0,     0,     0,     0,     0,    28,    29,
02612       30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
02613       40,     0,    41,    42,    43,    44,     0,    45,    46,    47,
02614        0,    48,    49,     0,     0,     0,     0,     0,     0,     0,
02615        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02616        0,    50,     0,     0,    51,    52,     0,    53,    54,     0,
02617       55,     0,     0,    56,    57,    58,    59,    60,    61,    62,
02618       63,    64,     0,     0,     0,     0,     0,     0,     0,     0,
02619        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02620        0,    65,    66,    67,     0,     0,  -626,     0,     0,     0,
02621        0,     0,     0,     0,  -626,   251,  -626,     5,     6,     7,
02622        8,     9,     0,     0,  -626,    10,    11,     0,     0,     0,
02623       12,     0,    13,    14,    15,    16,    17,    18,    19,     0,
02624        0,     0,     0,     0,    20,    21,    22,    23,    24,    25,
02625       26,     0,     0,    27,     0,     0,     0,     0,     0,    28,
02626       29,   252,    31,    32,    33,    34,    35,    36,    37,    38,
02627       39,    40,     0,    41,    42,    43,    44,     0,    45,    46,
02628       47,     0,    48,    49,     0,     0,     0,     0,     0,     0,
02629        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02630        0,     0,    50,     0,     0,    51,    52,     0,    53,    54,
02631        0,    55,     0,     0,    56,    57,    58,    59,    60,    61,
02632       62,    63,    64,     0,     0,     0,     0,     0,     0,     0,
02633      251,     0,     5,     6,     7,     8,     9,     0,     0,     0,
02634       10,    11,    65,    66,    67,    12,     0,    13,    14,    15,
02635       16,    17,    18,    19,     0,  -626,     0,  -626,     0,    20,
02636       21,    22,    23,    24,    25,    26,     0,     0,    27,     0,
02637        0,     0,     0,     0,    28,    29,   252,    31,    32,    33,
02638       34,    35,    36,    37,    38,    39,    40,     0,    41,    42,
02639       43,    44,     0,    45,    46,    47,     0,    48,    49,     0,
02640        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02641        0,     0,     0,     0,     0,     0,     0,    50,     0,     0,
02642       51,    52,     0,    53,    54,     0,    55,     0,     0,    56,
02643       57,    58,    59,    60,    61,    62,    63,    64,     0,  -626,
02644        0,     0,     0,     0,     0,     0,     0,     5,     6,     7,
02645        0,     9,     0,     0,     0,    10,    11,    65,    66,    67,
02646       12,     0,    13,    14,    15,    16,    17,    18,    19,     0,
02647     -626,     0,  -626,     0,    20,    21,    22,    23,    24,    25,
02648       26,     0,     0,   203,     0,     0,     0,     0,     0,     0,
02649       29,     0,     0,    32,    33,    34,    35,    36,    37,    38,
02650       39,    40,   204,    41,    42,    43,    44,     0,    45,    46,
02651       47,     0,    48,    49,     0,     0,     0,     0,     0,     0,
02652        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02653        0,     0,   205,     0,     0,   206,    52,     0,    53,    54,
02654        0,   207,   208,   209,    56,    57,    58,    59,    60,    61,
02655       62,    63,    64,     0,     0,     0,     0,     0,     0,     0,
02656        0,     0,     5,     6,     7,     0,     9,     0,     0,     0,
02657       10,    11,    65,   210,    67,    12,     0,    13,    14,    15,
02658       16,    17,    18,    19,     0,     0,     0,   234,     0,    20,
02659       21,    22,    23,    24,    25,    26,     0,     0,    27,     0,
02660        0,     0,     0,     0,     0,    29,     0,     0,    32,    33,
02661       34,    35,    36,    37,    38,    39,    40,     0,    41,    42,
02662       43,    44,     0,    45,    46,    47,     0,    48,    49,     0,
02663        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02664        0,     0,     0,     0,     0,     0,     0,   205,     0,     0,
02665      206,    52,     0,    53,    54,     0,     0,     0,     0,    56,
02666       57,    58,    59,    60,    61,    62,    63,    64,     0,     0,
02667        0,     0,     0,     0,     0,     0,     0,     5,     6,     7,
02668        0,     9,     0,     0,     0,    10,    11,    65,    66,    67,
02669       12,     0,    13,    14,    15,    16,    17,    18,    19,     0,
02670      304,     0,   305,     0,    20,    21,    22,    23,    24,    25,
02671       26,     0,     0,    27,     0,     0,     0,     0,     0,     0,
02672       29,     0,     0,    32,    33,    34,    35,    36,    37,    38,
02673       39,    40,     0,    41,    42,    43,    44,     0,    45,    46,
02674       47,     0,    48,    49,     0,     0,     0,     0,     0,     0,
02675        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02676        0,     0,   205,     0,     0,   206,    52,     0,    53,    54,
02677        0,     0,     0,     0,    56,    57,    58,    59,    60,    61,
02678       62,    63,    64,     0,     0,     0,     0,     0,     0,     0,
02679        0,     0,     5,     6,     7,     8,     9,     0,     0,     0,
02680       10,    11,    65,    66,    67,    12,     0,    13,    14,    15,
02681       16,    17,    18,    19,     0,     0,     0,   234,     0,    20,
02682       21,    22,    23,    24,    25,    26,     0,     0,    27,     0,
02683        0,     0,     0,     0,    28,    29,    30,    31,    32,    33,
02684       34,    35,    36,    37,    38,    39,    40,     0,    41,    42,
02685       43,    44,     0,    45,    46,    47,     0,    48,    49,     0,
02686        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02687        0,     0,     0,     0,     0,     0,     0,    50,     0,     0,
02688       51,    52,     0,    53,    54,     0,    55,     0,     0,    56,
02689       57,    58,    59,    60,    61,    62,    63,    64,     0,     0,
02690        0,     0,     0,     0,     0,     0,     0,     5,     6,     7,
02691        8,     9,     0,     0,     0,    10,    11,    65,    66,    67,
02692       12,     0,    13,    14,    15,    16,    17,    18,    19,     0,
02693      498,     0,     0,     0,    20,    21,    22,    23,    24,    25,
02694       26,     0,     0,    27,     0,     0,     0,     0,     0,    28,
02695       29,   252,    31,    32,    33,    34,    35,    36,    37,    38,
02696       39,    40,     0,    41,    42,    43,    44,     0,    45,    46,
02697       47,     0,    48,    49,     0,     0,     0,     0,     0,     0,
02698        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02699        0,     0,    50,     0,     0,    51,    52,     0,    53,    54,
02700        0,    55,     0,     0,    56,    57,    58,    59,    60,    61,
02701       62,    63,    64,     0,     0,     0,     0,     0,     0,     0,
02702        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02703        0,     0,    65,    66,    67,     0,     0,     0,     0,     0,
02704        0,     0,     0,     0,     0,   498,   121,   122,   123,   124,
02705      125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
02706      135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
02707        0,     0,     0,   145,   146,   147,   386,   387,   388,   389,
02708      152,   153,   154,     0,     0,     0,     0,     0,   155,   156,
02709      157,   158,   390,   391,   392,   393,   163,    37,    38,   394,
02710       40,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02711        0,   165,   166,   167,   168,   169,   170,   171,   172,   173,
02712        0,     0,   174,   175,     0,     0,   176,   177,   178,   179,
02713        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02714      180,   181,     0,     0,     0,     0,     0,     0,     0,     0,
02715        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02716        0,   182,   183,   184,   185,   186,   187,   188,   189,   190,
02717      191,     0,   192,   193,     0,     0,     0,     0,     0,     0,
02718      194,   395,   121,   122,   123,   124,   125,   126,   127,   128,
02719      129,   130,   131,   132,   133,   134,   135,   136,   137,   138,
02720      139,   140,   141,   142,   143,   144,     0,     0,     0,   145,
02721      146,   147,   148,   149,   150,   151,   152,   153,   154,     0,
02722        0,     0,     0,     0,   155,   156,   157,   158,   159,   160,
02723      161,   162,   163,   283,   284,   164,   285,     0,     0,     0,
02724        0,     0,     0,     0,     0,     0,     0,   165,   166,   167,
02725      168,   169,   170,   171,   172,   173,     0,     0,   174,   175,
02726        0,     0,   176,   177,   178,   179,     0,     0,     0,     0,
02727        0,     0,     0,     0,     0,     0,   180,   181,     0,     0,
02728        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02729        0,     0,     0,     0,     0,     0,     0,   182,   183,   184,
02730      185,   186,   187,   188,   189,   190,   191,     0,   192,   193,
02731        0,     0,     0,     0,     0,     0,   194,   121,   122,   123,
02732      124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
02733      134,   135,   136,   137,   138,   139,   140,   141,   142,   143,
02734      144,     0,     0,     0,   145,   146,   147,   148,   149,   150,
02735      151,   152,   153,   154,     0,     0,     0,     0,     0,   155,
02736      156,   157,   158,   159,   160,   161,   162,   163,   236,     0,
02737      164,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02738        0,     0,   165,   166,   167,   168,   169,   170,   171,   172,
02739      173,     0,     0,   174,   175,     0,     0,   176,   177,   178,
02740      179,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02741        0,   180,   181,     0,     0,    57,     0,     0,     0,     0,
02742        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02743        0,     0,   182,   183,   184,   185,   186,   187,   188,   189,
02744      190,   191,     0,   192,   193,     0,     0,     0,     0,     0,
02745        0,   194,   121,   122,   123,   124,   125,   126,   127,   128,
02746      129,   130,   131,   132,   133,   134,   135,   136,   137,   138,
02747      139,   140,   141,   142,   143,   144,     0,     0,     0,   145,
02748      146,   147,   148,   149,   150,   151,   152,   153,   154,     0,
02749        0,     0,     0,     0,   155,   156,   157,   158,   159,   160,
02750      161,   162,   163,     0,     0,   164,     0,     0,     0,     0,
02751        0,     0,     0,     0,     0,     0,     0,   165,   166,   167,
02752      168,   169,   170,   171,   172,   173,     0,     0,   174,   175,
02753        0,     0,   176,   177,   178,   179,     0,     0,     0,     0,
02754        0,     0,     0,     0,     0,     0,   180,   181,     0,     0,
02755       57,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02756        0,     0,     0,     0,     0,     0,     0,   182,   183,   184,
02757      185,   186,   187,   188,   189,   190,   191,     0,   192,   193,
02758        0,     0,     0,     0,     0,     0,   194,   121,   122,   123,
02759      124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
02760      134,   135,   136,   137,   138,   139,   140,   141,   142,   143,
02761      144,     0,     0,     0,   145,   146,   147,   148,   149,   150,
02762      151,   152,   153,   154,     0,     0,     0,     0,     0,   155,
02763      156,   157,   158,   159,   160,   161,   162,   163,     0,     0,
02764      164,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02765        0,     0,   165,   166,   167,   168,   169,   170,   171,   172,
02766      173,     0,     0,   174,   175,     0,     0,   176,   177,   178,
02767      179,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02768        0,   180,   181,     0,     0,     0,     0,     0,     0,     0,
02769        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02770        0,     0,   182,   183,   184,   185,   186,   187,   188,   189,
02771      190,   191,     0,   192,   193,     5,     6,     7,     0,     9,
02772        0,   194,     0,    10,    11,     0,     0,     0,    12,     0,
02773       13,    14,    15,   241,   242,    18,    19,     0,     0,     0,
02774        0,     0,   243,   244,   245,    23,    24,    25,    26,     0,
02775        0,   203,     0,     0,     0,     0,     0,     0,   271,     0,
02776        0,    32,    33,    34,    35,    36,    37,    38,    39,    40,
02777        0,    41,    42,    43,    44,     0,    45,    46,    47,     0,
02778        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02779        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02780      272,     0,     0,   206,    52,     0,    53,    54,     0,     0,
02781        0,     0,    56,    57,    58,    59,    60,    61,    62,    63,
02782       64,     0,     0,     0,     0,     0,     5,     6,     7,     0,
02783        9,     0,     0,     0,    10,    11,     0,     0,     0,    12,
02784      273,    13,    14,    15,   241,   242,    18,    19,   274,     0,
02785        0,     0,     0,   243,   244,   245,    23,    24,    25,    26,
02786        0,     0,   203,     0,     0,     0,     0,     0,     0,   271,
02787        0,     0,    32,    33,    34,    35,    36,    37,    38,    39,
02788       40,     0,    41,    42,    43,    44,     0,    45,    46,    47,
02789        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02790        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02791        0,   272,     0,     0,   206,    52,     0,    53,    54,     0,
02792        0,     0,     0,    56,    57,    58,    59,    60,    61,    62,
02793       63,    64,     0,     0,     0,     0,     0,     5,     6,     7,
02794        8,     9,     0,     0,     0,    10,    11,     0,     0,     0,
02795       12,   273,    13,    14,    15,    16,    17,    18,    19,   519,
02796        0,     0,     0,     0,    20,    21,    22,    23,    24,    25,
02797       26,     0,     0,    27,     0,     0,     0,     0,     0,    28,
02798       29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
02799       39,    40,     0,    41,    42,    43,    44,     0,    45,    46,
02800       47,     0,    48,    49,     0,     0,     0,     0,     0,     0,
02801        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02802        0,     0,    50,     0,     0,    51,    52,     0,    53,    54,
02803        0,    55,     0,     0,    56,    57,    58,    59,    60,    61,
02804       62,    63,    64,     0,     0,     0,     0,     0,     0,     0,
02805        0,     0,     5,     6,     7,     0,     9,     0,     0,     0,
02806       10,    11,    65,    66,    67,    12,     0,    13,    14,    15,
02807       16,    17,    18,    19,     0,     0,     0,     0,     0,    20,
02808       21,    22,    23,    24,    25,    26,     0,     0,   203,     0,
02809        0,     0,     0,     0,     0,    29,     0,     0,    32,    33,
02810       34,    35,    36,    37,    38,    39,    40,   204,    41,    42,
02811       43,    44,     0,    45,    46,    47,     0,    48,    49,     0,
02812        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02813        0,     0,     0,     0,     0,     0,     0,   205,     0,     0,
02814      206,    52,     0,    53,    54,     0,   207,   208,   209,    56,
02815       57,    58,    59,    60,    61,    62,    63,    64,     0,     0,
02816        0,     0,     0,     0,     0,     0,     0,     5,     6,     7,
02817        8,     9,     0,     0,     0,    10,    11,    65,   210,    67,
02818       12,     0,    13,    14,    15,    16,    17,    18,    19,     0,
02819        0,     0,     0,     0,    20,    21,    22,    23,    24,    25,
02820       26,     0,     0,    27,     0,     0,     0,     0,     0,    28,
02821       29,     0,    31,    32,    33,    34,    35,    36,    37,    38,
02822       39,    40,     0,    41,    42,    43,    44,     0,    45,    46,
02823       47,     0,    48,    49,     0,     0,     0,     0,     0,     0,
02824        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02825        0,     0,    50,     0,     0,    51,    52,     0,    53,    54,
02826        0,    55,     0,     0,    56,    57,    58,    59,    60,    61,
02827       62,    63,    64,     0,     0,     0,     0,     0,     0,     0,
02828        0,     0,     5,     6,     7,     0,     9,     0,     0,     0,
02829       10,    11,    65,    66,    67,    12,     0,    13,    14,    15,
02830      241,   242,    18,    19,     0,     0,     0,     0,     0,   243,
02831      244,   245,    23,    24,    25,    26,     0,     0,   203,     0,
02832        0,     0,     0,     0,     0,    29,     0,     0,    32,    33,
02833       34,    35,    36,    37,    38,    39,    40,   204,    41,    42,
02834       43,    44,     0,    45,    46,    47,     0,    48,    49,     0,
02835        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02836        0,     0,     0,     0,     0,     0,     0,   205,     0,     0,
02837      206,    52,     0,    53,    54,     0,   609,   208,   209,    56,
02838       57,    58,    59,    60,    61,    62,    63,    64,     0,     0,
02839        0,     0,     0,     0,     0,     0,     0,     5,     6,     7,
02840        0,     9,     0,     0,     0,    10,    11,    65,   210,    67,
02841       12,     0,    13,    14,    15,   241,   242,    18,    19,     0,
02842        0,     0,     0,     0,   243,   244,   245,    23,    24,    25,
02843       26,     0,     0,   203,     0,     0,     0,     0,     0,     0,
02844       29,     0,     0,    32,    33,    34,    35,    36,    37,    38,
02845       39,    40,   204,    41,    42,    43,    44,     0,    45,    46,
02846       47,     0,    48,    49,     0,     0,     0,     0,     0,     0,
02847        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02848        0,     0,   205,     0,     0,   206,    52,     0,    53,    54,
02849        0,   207,   208,     0,    56,    57,    58,    59,    60,    61,
02850       62,    63,    64,     0,     0,     0,     0,     0,     0,     0,
02851        0,     0,     5,     6,     7,     0,     9,     0,     0,     0,
02852       10,    11,    65,   210,    67,    12,     0,    13,    14,    15,
02853      241,   242,    18,    19,     0,     0,     0,     0,     0,   243,
02854      244,   245,    23,    24,    25,    26,     0,     0,   203,     0,
02855        0,     0,     0,     0,     0,    29,     0,     0,    32,    33,
02856       34,    35,    36,    37,    38,    39,    40,   204,    41,    42,
02857       43,    44,     0,    45,    46,    47,     0,    48,    49,     0,
02858        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02859        0,     0,     0,     0,     0,     0,     0,   205,     0,     0,
02860      206,    52,     0,    53,    54,     0,     0,   208,   209,    56,
02861       57,    58,    59,    60,    61,    62,    63,    64,     0,     0,
02862        0,     0,     0,     0,     0,     0,     0,     5,     6,     7,
02863        0,     9,     0,     0,     0,    10,    11,    65,   210,    67,
02864       12,     0,    13,    14,    15,   241,   242,    18,    19,     0,
02865        0,     0,     0,     0,   243,   244,   245,    23,    24,    25,
02866       26,     0,     0,   203,     0,     0,     0,     0,     0,     0,
02867       29,     0,     0,    32,    33,    34,    35,    36,    37,    38,
02868       39,    40,   204,    41,    42,    43,    44,     0,    45,    46,
02869       47,     0,    48,    49,     0,     0,     0,     0,     0,     0,
02870        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02871        0,     0,   205,     0,     0,   206,    52,     0,    53,    54,
02872        0,   609,   208,     0,    56,    57,    58,    59,    60,    61,
02873       62,    63,    64,     0,     0,     0,     0,     0,     0,     0,
02874        0,     0,     5,     6,     7,     0,     9,     0,     0,     0,
02875       10,    11,    65,   210,    67,    12,     0,    13,    14,    15,
02876      241,   242,    18,    19,     0,     0,     0,     0,     0,   243,
02877      244,   245,    23,    24,    25,    26,     0,     0,   203,     0,
02878        0,     0,     0,     0,     0,    29,     0,     0,    32,    33,
02879       34,    35,    36,    37,    38,    39,    40,   204,    41,    42,
02880       43,    44,     0,    45,    46,    47,     0,    48,    49,     0,
02881        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02882        0,     0,     0,     0,     0,     0,     0,   205,     0,     0,
02883      206,    52,     0,    53,    54,     0,     0,   208,     0,    56,
02884       57,    58,    59,    60,    61,    62,    63,    64,     0,     0,
02885        0,     0,     0,     0,     0,     0,     0,     5,     6,     7,
02886        0,     9,     0,     0,     0,    10,    11,    65,   210,    67,
02887       12,     0,    13,    14,    15,    16,    17,    18,    19,     0,
02888        0,     0,     0,     0,    20,    21,    22,    23,    24,    25,
02889       26,     0,     0,   203,     0,     0,     0,     0,     0,     0,
02890       29,     0,     0,    32,    33,    34,    35,    36,    37,    38,
02891       39,    40,     0,    41,    42,    43,    44,     0,    45,    46,
02892       47,     0,    48,    49,     0,     0,     0,     0,     0,     0,
02893        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02894        0,     0,   205,     0,     0,   206,    52,     0,    53,    54,
02895        0,   512,     0,     0,    56,    57,    58,    59,    60,    61,
02896       62,    63,    64,     0,     0,     0,     0,     0,     0,     0,
02897        0,     0,     5,     6,     7,     0,     9,     0,     0,     0,
02898       10,    11,    65,   210,    67,    12,     0,    13,    14,    15,
02899      241,   242,    18,    19,     0,     0,     0,     0,     0,   243,
02900      244,   245,    23,    24,    25,    26,     0,     0,   203,     0,
02901        0,     0,     0,     0,     0,    29,     0,     0,    32,    33,
02902       34,    35,    36,    37,    38,    39,    40,     0,    41,    42,
02903       43,    44,     0,    45,    46,    47,     0,    48,    49,     0,
02904        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02905        0,     0,     0,     0,     0,     0,     0,   205,     0,     0,
02906      206,    52,     0,    53,    54,     0,   207,     0,     0,    56,
02907       57,    58,    59,    60,    61,    62,    63,    64,     0,     0,
02908        0,     0,     0,     0,     0,     0,     0,     5,     6,     7,
02909        0,     9,     0,     0,     0,    10,    11,    65,   210,    67,
02910       12,     0,    13,    14,    15,   241,   242,    18,    19,     0,
02911        0,     0,     0,     0,   243,   244,   245,    23,    24,    25,
02912       26,     0,     0,   203,     0,     0,     0,     0,     0,     0,
02913       29,     0,     0,    32,    33,    34,    35,    36,    37,    38,
02914       39,    40,     0,    41,    42,    43,    44,     0,    45,    46,
02915       47,     0,    48,    49,     0,     0,     0,     0,     0,     0,
02916        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02917        0,     0,   205,     0,     0,   206,    52,     0,    53,    54,
02918        0,   817,     0,     0,    56,    57,    58,    59,    60,    61,
02919       62,    63,    64,     0,     0,     0,     0,     0,     0,     0,
02920        0,     0,     5,     6,     7,     0,     9,     0,     0,     0,
02921       10,    11,    65,   210,    67,    12,     0,    13,    14,    15,
02922      241,   242,    18,    19,     0,     0,     0,     0,     0,   243,
02923      244,   245,    23,    24,    25,    26,     0,     0,   203,     0,
02924        0,     0,     0,     0,     0,    29,     0,     0,    32,    33,
02925       34,    35,    36,    37,    38,    39,    40,     0,    41,    42,
02926       43,    44,     0,    45,    46,    47,     0,    48,    49,     0,
02927        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02928        0,     0,     0,     0,     0,     0,     0,   205,     0,     0,
02929      206,    52,     0,    53,    54,     0,   512,     0,     0,    56,
02930       57,    58,    59,    60,    61,    62,    63,    64,     0,     0,
02931        0,     0,     0,     0,     0,     0,     0,     5,     6,     7,
02932        0,     9,     0,     0,     0,    10,    11,    65,   210,    67,
02933       12,     0,    13,    14,    15,   241,   242,    18,    19,     0,
02934        0,     0,     0,     0,   243,   244,   245,    23,    24,    25,
02935       26,     0,     0,   203,     0,     0,     0,     0,     0,     0,
02936       29,     0,     0,    32,    33,    34,    35,    36,    37,    38,
02937       39,    40,     0,    41,    42,    43,    44,     0,    45,    46,
02938       47,     0,    48,    49,     0,     0,     0,     0,     0,     0,
02939        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02940        0,     0,   205,     0,     0,   206,    52,     0,    53,    54,
02941        0,   609,     0,     0,    56,    57,    58,    59,    60,    61,
02942       62,    63,    64,     0,     0,     0,     0,     0,     0,     0,
02943        0,     0,     5,     6,     7,     0,     9,     0,     0,     0,
02944       10,    11,    65,   210,    67,    12,     0,    13,    14,    15,
02945      241,   242,    18,    19,     0,     0,     0,     0,     0,   243,
02946      244,   245,    23,    24,    25,    26,     0,     0,   203,     0,
02947        0,     0,     0,     0,     0,    29,     0,     0,    32,    33,
02948       34,    35,    36,    37,    38,    39,    40,     0,    41,    42,
02949       43,    44,     0,    45,    46,    47,     0,    48,    49,     0,
02950        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02951        0,     0,     0,     0,     0,     0,     0,   205,     0,     0,
02952      206,    52,     0,    53,    54,     0,     0,     0,     0,    56,
02953       57,    58,    59,    60,    61,    62,    63,    64,     0,     0,
02954        0,     0,     0,     0,     0,     0,     0,     5,     6,     7,
02955        0,     9,     0,     0,     0,    10,    11,    65,   210,    67,
02956       12,     0,    13,    14,    15,    16,    17,    18,    19,     0,
02957        0,     0,     0,     0,    20,    21,    22,    23,    24,    25,
02958       26,     0,     0,   203,     0,     0,     0,     0,     0,     0,
02959       29,     0,     0,    32,    33,    34,    35,    36,    37,    38,
02960       39,    40,     0,    41,    42,    43,    44,     0,    45,    46,
02961       47,     0,    48,    49,     0,     0,     0,     0,     0,     0,
02962        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02963        0,     0,   205,     0,     0,   206,    52,     0,    53,    54,
02964        0,     0,     0,     0,    56,    57,    58,    59,    60,    61,
02965       62,    63,    64,     0,     0,     0,     0,     0,     0,     0,
02966        0,     0,     5,     6,     7,     0,     9,     0,     0,     0,
02967       10,    11,    65,   210,    67,    12,     0,    13,    14,    15,
02968       16,    17,    18,    19,     0,     0,     0,     0,     0,    20,
02969       21,    22,    23,    24,    25,    26,     0,     0,    27,     0,
02970        0,     0,     0,     0,     0,    29,     0,     0,    32,    33,
02971       34,    35,    36,    37,    38,    39,    40,     0,    41,    42,
02972       43,    44,     0,    45,    46,    47,     0,    48,    49,     0,
02973        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02974        0,     0,     0,     0,     0,     0,     0,   205,     0,     0,
02975      206,    52,     0,    53,    54,     0,     0,     0,     0,    56,
02976       57,    58,    59,    60,    61,    62,    63,    64,     0,     0,
02977        0,     0,     0,     0,     0,     0,     0,     5,     6,     7,
02978        0,     9,     0,     0,     0,    10,    11,    65,    66,    67,
02979       12,     0,    13,    14,    15,   241,   242,    18,    19,     0,
02980        0,     0,     0,     0,   243,   244,   245,    23,    24,    25,
02981       26,     0,     0,   203,     0,     0,     0,     0,     0,     0,
02982      271,     0,     0,    32,    33,    34,    35,    36,    37,    38,
02983       39,    40,     0,    41,    42,    43,    44,     0,    45,    46,
02984       47,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02985        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02986        0,     0,   272,     0,     0,   325,    52,     0,    53,    54,
02987        0,   326,     0,     0,    56,    57,    58,    59,    60,    61,
02988       62,    63,    64,     0,     0,     0,     0,     0,     5,     6,
02989        7,     0,     9,     0,     0,     0,    10,    11,     0,     0,
02990        0,    12,   273,    13,    14,    15,   241,   242,    18,    19,
02991        0,     0,     0,     0,     0,   243,   244,   245,    23,    24,
02992       25,    26,     0,     0,   203,     0,     0,     0,     0,     0,
02993        0,   271,     0,     0,    32,    33,    34,    35,    36,    37,
02994       38,    39,    40,     0,    41,    42,    43,    44,     0,    45,
02995       46,    47,     0,     0,     0,     0,     0,     0,     0,     0,
02996        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02997        0,     0,     0,   367,     0,     0,    51,    52,     0,    53,
02998       54,     0,    55,     0,     0,    56,    57,    58,    59,    60,
02999       61,    62,    63,    64,     0,     0,     0,     0,     0,     5,
03000        6,     7,     0,     9,     0,     0,     0,    10,    11,     0,
03001        0,     0,    12,   273,    13,    14,    15,   241,   242,    18,
03002       19,     0,     0,     0,     0,     0,   243,   244,   245,    23,
03003       24,    25,    26,     0,     0,   203,     0,     0,     0,     0,
03004        0,     0,   271,     0,     0,    32,    33,    34,   375,    36,
03005       37,    38,   376,    40,     0,    41,    42,    43,    44,     0,
03006       45,    46,    47,     0,     0,     0,     0,     0,     0,     0,
03007        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
03008        0,   377,     0,     0,   378,     0,     0,   206,    52,     0,
03009       53,    54,     0,     0,     0,     0,    56,    57,    58,    59,
03010       60,    61,    62,    63,    64,     0,     0,     0,     0,     0,
03011        5,     6,     7,     0,     9,     0,     0,     0,    10,    11,
03012        0,     0,     0,    12,   273,    13,    14,    15,   241,   242,
03013       18,    19,     0,     0,     0,     0,     0,   243,   244,   245,
03014       23,    24,    25,    26,     0,     0,   203,     0,     0,     0,
03015        0,     0,     0,   271,     0,     0,    32,    33,    34,   375,
03016       36,    37,    38,   376,    40,     0,    41,    42,    43,    44,
03017        0,    45,    46,    47,     0,     0,     0,     0,     0,     0,
03018        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
03019        0,     0,     0,     0,     0,   378,     0,     0,   206,    52,
03020        0,    53,    54,     0,     0,     0,     0,    56,    57,    58,
03021       59,    60,    61,    62,    63,    64,     0,     0,     0,     0,
03022        0,     5,     6,     7,     0,     9,     0,     0,     0,    10,
03023       11,     0,     0,     0,    12,   273,    13,    14,    15,   241,
03024      242,    18,    19,     0,     0,     0,     0,     0,   243,   244,
03025      245,    23,    24,    25,    26,     0,     0,   203,     0,     0,
03026        0,     0,     0,     0,   271,     0,     0,    32,    33,    34,
03027       35,    36,    37,    38,    39,    40,     0,    41,    42,    43,
03028       44,     0,    45,    46,    47,     0,     0,     0,     0,     0,
03029        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
03030        0,     0,     0,     0,     0,     0,   272,     0,     0,   325,
03031       52,     0,    53,    54,     0,     0,     0,     0,    56,    57,
03032       58,    59,    60,    61,    62,    63,    64,     0,     0,     0,
03033        0,     0,     5,     6,     7,     0,     9,     0,     0,     0,
03034       10,    11,     0,     0,     0,    12,   273,    13,    14,    15,
03035      241,   242,    18,    19,     0,     0,     0,     0,     0,   243,
03036      244,   245,    23,    24,    25,    26,     0,     0,   203,     0,
03037        0,     0,     0,     0,     0,   271,     0,     0,    32,    33,
03038       34,    35,    36,    37,    38,    39,    40,     0,    41,    42,
03039       43,    44,     0,    45,    46,    47,     0,     0,     0,     0,
03040        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
03041        0,     0,     0,     0,     0,     0,     0,   899,     0,     0,
03042      206,    52,     0,    53,    54,     0,     0,     0,     0,    56,
03043       57,    58,    59,    60,    61,    62,    63,    64,     0,     0,
03044        0,     0,     0,     5,     6,     7,     0,     9,     0,     0,
03045        0,    10,    11,     0,     0,     0,    12,   273,    13,    14,
03046       15,   241,   242,    18,    19,     0,     0,     0,     0,     0,
03047      243,   244,   245,    23,    24,    25,    26,     0,     0,   203,
03048        0,     0,     0,     0,     0,     0,   271,     0,     0,    32,
03049       33,    34,    35,    36,    37,    38,    39,    40,     0,    41,
03050       42,    43,    44,     0,    45,    46,    47,     0,     0,     0,
03051        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
03052        0,     0,     0,     0,     0,     0,     0,     0,   976,     0,
03053        0,   206,    52,     0,    53,    54,     0,     0,     0,     0,
03054       56,    57,    58,    59,    60,    61,    62,    63,    64,     0,
03055        0,     0,     0,   554,   555,     0,     0,   556,     0,     0,
03056        0,     0,     0,     0,     0,     0,     0,     0,   273,   165,
03057      166,   167,   168,   169,   170,   171,   172,   173,     0,     0,
03058      174,   175,     0,     0,   176,   177,   178,   179,     0,     0,
03059        0,     0,     0,     0,     0,     0,     0,     0,   180,   181,
03060        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
03061        0,     0,     0,     0,     0,     0,     0,     0,     0,   182,
03062      183,   184,   185,   186,   187,   188,   189,   190,   191,     0,
03063      192,   193,   562,   563,     0,     0,   564,     0,   194,     0,
03064        0,     0,     0,     0,     0,     0,     0,     0,   165,   166,
03065      167,   168,   169,   170,   171,   172,   173,     0,     0,   174,
03066      175,     0,     0,   176,   177,   178,   179,     0,     0,     0,
03067        0,     0,     0,     0,     0,     0,     0,   180,   181,     0,
03068        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
03069        0,     0,     0,     0,     0,     0,     0,     0,   182,   183,
03070      184,   185,   186,   187,   188,   189,   190,   191,     0,   192,
03071      193,   599,   563,     0,     0,   600,     0,   194,     0,     0,
03072        0,     0,     0,     0,     0,     0,     0,   165,   166,   167,
03073      168,   169,   170,   171,   172,   173,     0,     0,   174,   175,
03074        0,     0,   176,   177,   178,   179,     0,     0,     0,     0,
03075        0,     0,     0,     0,     0,     0,   180,   181,     0,     0,
03076        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
03077        0,     0,     0,     0,     0,     0,     0,   182,   183,   184,
03078      185,   186,   187,   188,   189,   190,   191,     0,   192,   193,
03079      613,   555,     0,     0,   614,     0,   194,     0,     0,     0,
03080        0,     0,     0,     0,     0,     0,   165,   166,   167,   168,
03081      169,   170,   171,   172,   173,     0,     0,   174,   175,     0,
03082        0,   176,   177,   178,   179,     0,     0,     0,     0,     0,
03083        0,     0,     0,     0,     0,   180,   181,     0,     0,     0,
03084        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
03085        0,     0,     0,     0,     0,     0,   182,   183,   184,   185,
03086      186,   187,   188,   189,   190,   191,     0,   192,   193,   616,
03087      563,     0,     0,   617,     0,   194,     0,     0,     0,     0,
03088        0,     0,     0,     0,     0,   165,   166,   167,   168,   169,
03089      170,   171,   172,   173,     0,     0,   174,   175,     0,     0,
03090      176,   177,   178,   179,     0,     0,     0,     0,     0,     0,
03091        0,     0,     0,     0,   180,   181,     0,     0,     0,     0,
03092        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
03093        0,     0,     0,     0,     0,   182,   183,   184,   185,   186,
03094      187,   188,   189,   190,   191,     0,   192,   193,   640,   555,
03095        0,     0,   641,     0,   194,     0,     0,     0,     0,     0,
03096        0,     0,     0,     0,   165,   166,   167,   168,   169,   170,
03097      171,   172,   173,     0,     0,   174,   175,     0,     0,   176,
03098      177,   178,   179,     0,     0,     0,     0,     0,     0,     0,
03099        0,     0,     0,   180,   181,     0,     0,     0,     0,     0,
03100        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
03101        0,     0,     0,     0,   182,   183,   184,   185,   186,   187,
03102      188,   189,   190,   191,     0,   192,   193,   643,   563,     0,
03103        0,   644,     0,   194,     0,     0,     0,     0,     0,     0,
03104        0,     0,     0,   165,   166,   167,   168,   169,   170,   171,
03105      172,   173,     0,     0,   174,   175,     0,     0,   176,   177,
03106      178,   179,     0,     0,     0,     0,     0,     0,     0,     0,
03107        0,     0,   180,   181,     0,     0,     0,     0,     0,     0,
03108        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
03109        0,     0,     0,   182,   183,   184,   185,   186,   187,   188,
03110      189,   190,   191,     0,   192,   193,   728,   555,     0,     0,
03111      729,     0,   194,     0,     0,     0,     0,     0,     0,     0,
03112        0,     0,   165,   166,   167,   168,   169,   170,   171,   172,
03113      173,     0,     0,   174,   175,     0,     0,   176,   177,   178,
03114      179,     0,     0,     0,     0,     0,     0,     0,     0,     0,
03115        0,   180,   181,     0,     0,     0,     0,     0,     0,     0,
03116        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
03117        0,     0,   182,   183,   184,   185,   186,   187,   188,   189,
03118      190,   191,     0,   192,   193,   731,   563,     0,     0,   732,
03119        0,   194,     0,     0,     0,     0,     0,     0,     0,     0,
03120        0,   165,   166,   167,   168,   169,   170,   171,   172,   173,
03121        0,     0,   174,   175,     0,     0,   176,   177,   178,   179,
03122        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
03123      180,   181,     0,     0,     0,     0,     0,     0,     0,     0,
03124        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
03125        0,   182,   183,   184,   185,   186,   187,   188,   189,   190,
03126      191,     0,   192,   193,   738,   555,     0,     0,   739,     0,
03127      194,     0,     0,     0,     0,     0,     0,     0,     0,     0,
03128      165,   166,   167,   168,   169,   170,   171,   172,   173,     0,
03129        0,   174,   175,     0,     0,   176,   177,   178,   179,     0,
03130        0,     0,     0,     0,     0,     0,     0,     0,     0,   180,
03131      181,     0,     0,     0,     0,     0,     0,     0,     0,     0,
03132        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
03133      182,   183,   184,   185,   186,   187,   188,   189,   190,   191,
03134        0,   192,   193,  1008,   555,     0,     0,  1009,     0,   194,
03135        0,     0,     0,     0,     0,     0,     0,     0,     0,   165,
03136      166,   167,   168,   169,   170,   171,   172,   173,     0,     0,
03137      174,   175,     0,     0,   176,   177,   178,   179,     0,     0,
03138        0,     0,     0,     0,     0,     0,     0,     0,   180,   181,
03139        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
03140        0,     0,     0,     0,     0,     0,     0,     0,     0,   182,
03141      183,   184,   185,   186,   187,   188,   189,   190,   191,     0,
03142      192,   193,  1039,   555,     0,     0,  1040,     0,   194,     0,
03143        0,     0,     0,     0,     0,     0,     0,     0,   165,   166,
03144      167,   168,   169,   170,   171,   172,   173,     0,     0,   174,
03145      175,     0,     0,   176,   177,   178,   179,     0,     0,     0,
03146        0,     0,     0,     0,     0,     0,     0,   180,   181,     0,
03147        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
03148        0,     0,     0,     0,     0,     0,     0,     0,   182,   183,
03149      184,   185,   186,   187,   188,   189,   190,   191,     0,   192,
03150      193,  1042,   563,     0,     0,  1043,     0,   194,     0,     0,
03151        0,     0,     0,     0,     0,     0,     0,   165,   166,   167,
03152      168,   169,   170,   171,   172,   173,     0,     0,   174,   175,
03153        0,     0,   176,   177,   178,   179,     0,     0,     0,     0,
03154        0,     0,     0,     0,     0,     0,   180,   181,   329,   330,
03155      331,   332,   333,   334,   335,   336,   337,   338,   339,   340,
03156      341,     0,     0,   342,   343,     0,     0,   182,   183,   184,
03157      185,   186,   187,   188,   189,   190,   191,     0,   192,   193,
03158        0,     0,     0,     0,     0,     0,   194,     0,     0,     0,
03159        0,     0,     0,     0,   344,     0,   345,   346,   347,   348,
03160      349,   350,   351,   352,   353,   354,     0,     0,     0,     0,
03161        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
03162        0,   234
03163 };
03164 
03165 #define yypact_value_is_default(yystate) \
03166   ((yystate) == (-816))
03167 
03168 #define yytable_value_is_error(yytable_value) \
03169   ((yytable_value) == (-627))
03170 
03171 static const yytype_int16 yycheck[] =
03172 {
03173        2,    27,    57,    29,    55,    16,    17,   356,    98,    20,
03174      233,     8,    28,    69,    89,   361,   328,    92,    81,   355,
03175      328,   357,     2,   223,     4,   576,    22,     4,   578,   595,
03176       81,    28,   686,    92,     8,   258,    92,   422,   261,   575,
03177      414,    96,    93,    94,    95,   265,    88,    89,   422,   269,
03178       92,    53,    54,   469,    28,   615,    65,   787,    51,     8,
03179       57,   670,   442,    16,    17,   401,   473,    20,   716,   418,
03180       76,    55,   720,    16,    17,   460,     2,    20,     4,    28,
03181       76,   417,   642,   419,   378,   778,    27,   874,    26,   904,
03182       16,    17,    25,   289,    20,   291,    25,   293,    63,    96,
03183       53,   297,    26,   519,   908,    66,    69,   872,    63,   445,
03184       53,    54,   253,    25,    25,     1,   508,    87,    25,   511,
03185      775,   136,   471,    89,   778,    51,    13,    89,   143,    55,
03186       52,    25,     0,   787,    56,    87,   472,    87,    16,    17,
03187       66,    25,    20,   143,   109,   800,   111,    87,    78,   115,
03188       25,    25,    89,   115,   109,    81,   111,    99,   141,   132,
03189      143,    13,    88,    89,    63,   135,    92,    93,    94,    95,
03190      730,   737,    13,    37,    38,   725,   941,   142,   115,   745,
03191      122,   741,    13,   135,   325,   135,    15,   142,    17,  1004,
03192      120,   233,   742,   235,   132,   135,   255,   806,   807,   255,
03193      141,   424,   143,   136,   897,   428,   993,   136,   132,   138,
03194      433,   274,  1016,   112,   138,   217,   227,   947,   229,   230,
03195      262,   223,    56,   274,   136,   136,   449,   138,   230,   136,
03196      995,   431,   581,   119,   309,   310,   311,   312,   623,   686,
03197      246,    13,   136,   897,   593,   271,   582,   142,   622,   623,
03198      904,   658,   136,   633,   141,   141,   143,   143,   594,   952,
03199      253,   136,   136,  1028,   273,   142,    13,   309,   310,   311,
03200      312,   251,   314,   315,   227,   326,   229,   886,   138,   143,
03201      206,   697,   930,   143,   227,    63,   229,   362,   363,   141,
03202      486,   143,   255,   947,   844,   518,   846,   493,   592,   691,
03203      141,   227,   143,   229,   230,   364,   856,   233,   364,   235,
03204      141,   861,   143,   672,   240,   674,   136,   853,  1011,   142,
03205      362,   363,    28,   143,   380,   251,    29,   253,   308,    89,
03206       89,   308,   325,   313,   112,   377,   262,   744,   142,   746,
03207      787,   115,   326,   790,    26,   356,   136,   658,   274,   227,
03208     1004,   229,   115,    87,   356,   115,   115,   966,   102,    25,
03209      357,   136,   323,    87,   136,   136,   932,   328,   143,   141,
03210      323,   143,    87,    25,   704,   328,    87,   927,   928,   930,
03211      726,   711,   308,   309,   310,   311,   312,   313,   314,   315,
03212      698,   138,    89,   115,   141,    89,   143,   323,    87,   325,
03213      326,   135,   328,   715,   401,    87,   469,   418,   138,    51,
03214      113,   135,   612,   636,   136,    56,   418,   637,   469,   134,
03215      135,   115,   419,   439,   135,   115,   992,   139,   430,   431,
03216      356,   143,   358,   744,    87,   746,   362,   363,    87,    90,
03217      442,   991,   439,   404,   405,   134,   135,   138,   445,   115,
03218      132,   377,   134,   135,    89,    70,   519,   904,   136,   906,
03219      471,   136,   442,   115,   132,   439,   138,    87,   519,   471,
03220      136,   414,    70,   139,  1024,   472,  1026,   143,   404,   405,
03221       87,  1041,   135,   868,   136,   134,   135,   139,    63,   138,
03222      439,   143,   418,    52,   868,    54,    55,    56,    57,   138,
03223      947,   139,   949,    87,    89,   507,   508,   954,    87,   511,
03224      125,   126,   127,    26,   457,   135,   442,   543,   574,   575,
03225      743,    37,    38,   115,   883,   884,   452,   134,   135,   888,
03226      115,   890,   588,   892,   109,   561,   111,   112,   140,   762,
03227      686,    14,    15,   469,    52,   471,    54,    55,    56,    57,
03228      773,   135,   558,    87,   596,   134,   135,  1004,    56,  1006,
03229      566,   761,   133,   559,   206,   112,  1013,   569,    26,    63,
03230      581,   567,   918,   686,    87,   638,   136,   136,   924,   581,
03231       89,   112,   593,  1030,   626,   582,   112,   638,   112,   615,
03232      606,   593,    70,   519,    96,   601,   136,   594,   240,   601,
03233      134,   135,    17,    63,  1051,   601,   115,    56,    63,   606,
03234      612,   253,    67,   141,    26,   109,   642,   111,   112,   132,
03235       25,   134,   135,   142,   577,   138,   136,   136,   136,    87,
03236      133,   633,   606,   139,   697,   781,   136,   860,    63,   785,
03237      999,  1000,  1001,  1002,   132,   571,   697,   573,   871,   109,
03238       87,   111,   112,   633,   109,   581,   111,   606,   733,   749,
03239      686,   736,   686,   142,   136,   136,   668,   593,   670,   595,
03240      596,  1020,   136,   136,   132,    87,   134,   135,   734,   622,
03241      138,   115,    89,   325,   109,  1021,   111,   112,    87,   691,
03242     1049,   733,   747,   136,   736,    10,   138,   134,   135,   705,
03243      626,     8,    13,   138,   730,    89,   712,   633,   115,   133,
03244      712,   115,   638,   715,   716,   741,   718,   136,   720,   136,
03245      132,    63,   134,   135,    52,   136,   138,   136,     2,   136,
03246        4,   115,    87,    54,    52,   134,   135,   698,    87,   136,
03247      701,   702,    16,    17,    65,    66,    20,   708,   709,   775,
03248      747,   897,   136,   804,    52,   901,   136,   781,   904,   761,
03249      906,   687,   715,   117,   690,   140,   692,   109,   843,   111,
03250      112,   697,   698,    87,   800,   701,   702,    51,    70,   134,
03251      135,    15,   708,   709,   897,   134,   135,   133,   901,   136,
03252       87,   904,    66,   906,   120,   136,    87,   853,   115,   855,
03253       58,   843,   136,   136,   806,   807,   862,   733,    87,   136,
03254      736,   737,    70,   136,    88,    89,   141,    10,    92,   745,
03255      134,   135,    10,   133,    52,    89,    54,    55,    56,    57,
03256       58,   123,   124,   125,   126,   127,   838,   134,   135,   841,
03257       98,    99,    70,   134,   135,   896,   136,    90,     2,    89,
03258        4,   115,   809,   810,     9,   134,   135,    89,  1004,    89,
03259     1006,   136,   139,    91,   122,  1011,   917,  1013,   829,   136,
03260       98,    99,   136,   897,   136,   115,   136,   901,   804,   136,
03261      904,   120,   906,   115,   886,   115,    56,   133,   136,   815,
03262       10,  1004,   136,  1006,   122,   133,   136,    51,  1011,   110,
03263     1013,    55,   138,   829,   136,  1051,   136,    40,    41,    42,
03264       43,    44,    54,    55,   840,    57,   136,   843,   136,    70,
03265      136,   847,   848,    65,    66,   851,   136,    81,   930,   571,
03266       56,   573,   206,   136,    85,    86,   136,   138,  1051,    93,
03267       94,    95,    96,    93,   136,    52,   972,    54,    55,    56,
03268       57,   877,   878,   227,    95,   229,   230,   452,   712,   233,
03269      769,   235,  1023,   686,   966,   750,   240,   893,  1016,  1022,
03270      896,   122,   123,   124,   125,   126,   127,   251,   101,   253,
03271     1004,   297,  1006,    59,    91,    96,   781,  1011,   262,  1013,
03272       97,   917,   938,   901,    52,   921,    54,    55,    56,    57,
03273       59,    60,    61,    62,   961,   962,   932,   897,   778,  1020,
03274      967,   398,   969,   970,    70,  1041,    -1,    -1,  1020,    -1,
03275     1022,  1023,    -1,    -1,  1021,    -1,    -1,  1051,    -1,    85,
03276       86,    -1,    -1,    91,   308,   309,   310,   311,   312,   313,
03277      314,   315,    -1,    -1,    -1,   687,    -1,    -1,   690,   323,
03278      692,   325,   206,    -1,   328,    -1,   982,    52,   984,    54,
03279       55,    56,    57,    -1,   990,    -1,   992,   123,   124,   125,
03280      126,   127,    16,    17,    -1,    -1,    20,  1034,  1035,  1036,
03281     1037,    -1,   356,    -1,   358,    -1,   240,    -1,   362,   363,
03282       -1,    -1,    -1,    -1,  1020,    -1,    91,   251,    -1,   253,
03283     1057,    -1,    97,   377,    48,    49,    -1,    -1,    -1,    53,
03284       54,    52,    -1,    54,    55,    56,    57,    58,    -1,    -1,
03285      274,    -1,    66,    67,    -1,    -1,    -1,    -1,    -1,    70,
03286      404,   405,    52,    -1,    54,    55,    56,    57,    -1,    -1,
03287       -1,    -1,    -1,    52,   418,    54,    55,    56,    57,    58,
03288       91,    -1,    -1,    -1,   308,    -1,    97,    98,    99,   313,
03289       -1,    70,    -1,    -1,    -1,    -1,    -1,    -1,   442,    -1,
03290       70,   325,   326,   815,    -1,    -1,    -1,    -1,   452,    -1,
03291       -1,   122,    91,    -1,   125,    85,    86,    -1,    97,    98,
03292       99,    -1,    -1,    -1,    -1,    -1,    -1,   471,   840,    -1,
03293       -1,    -1,   143,    -1,   358,   847,   848,    -1,    -1,   851,
03294       -1,    -1,    -1,   122,    -1,    -1,   125,    -1,    -1,    -1,
03295      120,   121,   122,   123,   124,   125,   126,   127,    -1,   138,
03296       -1,     0,    -1,    -1,    -1,   877,   878,    -1,    -1,     8,
03297        9,    10,    -1,    -1,    13,    14,    15,    -1,    17,    -1,
03298       -1,   893,     2,    -1,     4,    -1,    -1,    26,    27,    -1,
03299      204,    -1,    -1,   207,   208,   209,   210,    -1,    37,    38,
03300       -1,    40,    41,    42,    43,    44,    -1,    -1,    -1,   921,
03301       -1,    -1,    -1,   227,    -1,   229,   230,    -1,   442,    -1,
03302       -1,    -1,    -1,    -1,    -1,    -1,    -1,   571,   452,   573,
03303       -1,    51,    -1,    -1,    -1,    55,    -1,   581,    52,    -1,
03304       54,    55,    56,    57,    58,   469,    -1,    -1,    87,   593,
03305       -1,   595,   596,    -1,    -1,    -1,    70,    -1,    -1,    -1,
03306       -1,    81,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03307      982,   110,   984,    93,    94,    95,    96,    91,   990,    -1,
03308       -1,    -1,   626,    97,    98,    99,    -1,    -1,    -1,   633,
03309       -1,    -1,    -1,   132,   133,   519,   135,    -1,    -1,   138,
03310      139,    -1,   141,    -1,   143,    -1,    -1,    -1,   122,   323,
03311       -1,   125,    -1,    -1,   328,   329,   330,   331,   332,   333,
03312      334,   335,   336,   337,   338,   339,   340,   341,   342,   343,
03313      344,   345,   346,   347,   348,   349,   350,   351,   352,   353,
03314      354,    -1,   356,   687,    -1,    -1,   690,   571,   692,   573,
03315       -1,    -1,    -1,    -1,   698,    -1,    -1,   701,   702,    -1,
03316      473,    -1,    -1,    -1,   708,   709,    -1,    -1,    -1,    -1,
03317       -1,   595,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03318       -1,    -1,    -1,    -1,    -1,    -1,   206,    -1,    -1,   733,
03319      404,   405,   736,   737,    -1,    -1,    -1,    -1,   412,   413,
03320      414,   745,    -1,    -1,   418,    -1,   420,   421,   422,   633,
03321       -1,    -1,    -1,    -1,   638,    -1,    -1,    -1,    -1,    -1,
03322      240,    -1,    -1,    -1,    -1,    -1,    -1,   441,    -1,    -1,
03323       -1,   251,   446,   253,    -1,    -1,    -1,    -1,    -1,    -1,
03324       -1,    -1,    -1,   457,    -1,    -1,   460,    -1,    -1,    -1,
03325       -1,    -1,    -1,    -1,   274,    -1,    -1,   471,    -1,    -1,
03326       -1,    -1,    -1,   687,    -1,    -1,   690,    -1,   692,    -1,
03327       -1,   815,    -1,   697,    -1,    -1,    -1,    -1,    -1,    -1,
03328       -1,    -1,    -1,   497,    -1,   829,    -1,    -1,   308,    -1,
03329       -1,    -1,    -1,   313,    -1,    -1,   840,    -1,   512,   843,
03330       -1,    -1,    -1,   847,   848,   325,   326,   851,    -1,    -1,
03331       -1,    -1,    -1,   737,    -1,    -1,    -1,    -1,    -1,    -1,
03332       -1,   745,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     2,
03333       -1,     4,    -1,   877,   878,    -1,    -1,    -1,   358,   652,
03334       -1,    -1,    -1,    -1,    -1,   658,    -1,    -1,    -1,   893,
03335        2,    -1,     4,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03336       -1,    -1,    -1,   577,    -1,    -1,    -1,   581,    -1,    -1,
03337       -1,    -1,    -1,   686,    -1,    -1,    -1,   921,    51,   593,
03338      804,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   932,    -1,
03339       -1,   815,    -1,    -1,    -1,   609,    -1,    -1,    -1,    51,
03340       -1,    -1,    -1,    55,    -1,    -1,    -1,    -1,   622,   623,
03341       -1,    -1,    -1,    -1,    -1,    -1,   840,    -1,    -1,    -1,
03342       -1,    -1,   442,   847,   848,    -1,    -1,   851,    -1,    81,
03343       -1,   744,   452,   746,    -1,    -1,    -1,     2,   982,     4,
03344      984,    93,    94,    95,    -1,    -1,   990,    -1,   992,   469,
03345       -1,    -1,   666,   877,   878,    -1,   769,   770,    -1,    -1,
03346       -1,    -1,    -1,    -1,    -1,   778,    -1,    -1,    -1,   893,
03347       -1,    -1,   896,    -1,   787,    -1,  1020,    -1,    -1,    -1,
03348      694,    -1,    -1,    -1,   698,   699,    51,   701,   702,    -1,
03349       -1,    -1,    -1,   917,   708,   709,    -1,   921,    -1,   519,
03350       -1,   715,    -1,    -1,    -1,    -1,    -1,    -1,   932,    -1,
03351       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03352       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    93,    -1,
03353       -1,    -1,    -1,   206,    -1,    -1,    -1,    -1,   752,    -1,
03354       -1,    -1,   756,   757,    -1,   759,   760,    54,    -1,    -1,
03355       -1,   571,    -1,   573,   206,    -1,    -1,    -1,   982,   872,
03356      984,   874,    -1,   777,    -1,    -1,   990,   240,   992,    -1,
03357       -1,    -1,    -1,    -1,    -1,   595,    -1,    -1,   251,    -1,
03358      253,    -1,    -1,    -1,   897,    -1,    -1,    -1,   240,    -1,
03359       -1,   904,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   251,
03360       -1,   253,    -1,   817,    -1,    -1,    -1,   821,    -1,    -1,
03361       -1,    -1,    -1,   633,    -1,   829,    -1,    -1,   638,    -1,
03362       -1,    -1,   274,    -1,    -1,    -1,    -1,    -1,   941,   942,
03363       -1,    -1,    -1,    -1,   947,   308,   850,    -1,    -1,    -1,
03364      313,   206,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03365       -1,    -1,   325,   867,   868,    -1,   308,    -1,    -1,    -1,
03366       -1,   313,    -1,    -1,    -1,    -1,    -1,   687,    -1,    -1,
03367      690,    -1,   692,   325,   326,   240,    -1,   697,    -1,    -1,
03368      993,    -1,   995,    -1,    -1,   358,   251,    -1,   253,    -1,
03369       -1,  1004,    -1,    -1,    -1,    -1,    -1,   204,    -1,    -1,
03370      207,   208,   209,    -1,    -1,    -1,   358,    -1,    -1,    -1,
03371       -1,    -1,    -1,    -1,    -1,  1028,    -1,   737,    -1,    -1,
03372       -1,    -1,    -1,    -1,    -1,   745,    -1,    -1,    -1,    -1,
03373       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03374       -1,    -1,    -1,   308,    -1,    -1,    -1,    -1,   313,    -1,
03375       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03376      325,    -1,    -1,   328,    -1,    -1,    -1,    -1,    -1,   442,
03377       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   452,
03378       -1,    -1,    -1,    -1,   804,    -1,    -1,    -1,    -1,    -1,
03379      442,    -1,    -1,   358,    -1,   815,    -1,    -1,    -1,    -1,
03380      452,    -1,    -1,    -1,    -1,    -1,  1020,    -1,    -1,    -1,
03381       -1,    -1,    -1,    -1,    -1,    -1,   323,   469,    -1,    -1,
03382      840,   328,    -1,    -1,    -1,    -1,    -1,   847,   848,    -1,
03383       -1,   851,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03384       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03385       -1,    -1,    -1,    -1,    -1,    -1,    -1,   877,   878,    -1,
03386       -1,    -1,    -1,    -1,    -1,    -1,    -1,   519,    -1,    -1,
03387       -1,    -1,    -1,   893,    -1,    -1,   896,   442,    -1,    70,
03388       71,    72,    73,    74,    75,    76,    77,   452,    79,    80,
03389       -1,    -1,    -1,    -1,    85,    86,    -1,   917,   571,    -1,
03390      573,   921,    -1,    -1,    -1,    -1,   413,   414,    -1,    -1,
03391       -1,    -1,   932,    -1,    -1,   422,    -1,    -1,    -1,   571,
03392       -1,   573,   595,    -1,    -1,    -1,    -1,   118,   119,   120,
03393      121,   122,   123,   124,   125,   126,   127,    -1,    -1,    -1,
03394       -1,    -1,    -1,   595,    -1,    -1,    -1,    -1,    -1,    -1,
03395      457,    -1,    -1,   460,    -1,    -1,    -1,    -1,    -1,    -1,
03396      633,    -1,   982,    -1,   984,    -1,    -1,    -1,    -1,    -1,
03397      990,    -1,   992,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03398       -1,   633,    -1,    -1,    -1,    -1,   638,    -1,    -1,    -1,
03399       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03400       -1,    -1,    -1,    -1,    -1,   512,   571,    -1,   573,    -1,
03401       -1,    -1,    -1,    -1,   687,    -1,    -1,   690,    -1,   692,
03402       -1,    -1,    -1,    -1,    -1,    -1,   678,    -1,    -1,    -1,
03403      595,    -1,    -1,    -1,    -1,   687,    -1,    -1,   690,    -1,
03404      692,    -1,    -1,    -1,    -1,   697,    -1,    -1,    -1,    -1,
03405       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03406       -1,    -1,    -1,    -1,   737,    -1,    -1,    -1,   633,    -1,
03407      577,    -1,   745,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03408       -1,    -1,    -1,    -1,    -1,   737,    -1,    -1,    -1,    -1,
03409       -1,    -1,    -1,   745,    -1,    -1,    -1,    -1,    -1,    -1,
03410       -1,    -1,   609,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03411       -1,    -1,    -1,    -1,    -1,   622,   623,    -1,    -1,    -1,
03412       -1,    -1,   687,    -1,    -1,   690,    -1,   692,    -1,    -1,
03413       -1,    -1,    -1,   698,    -1,    -1,    -1,    -1,    -1,    -1,
03414       -1,    -1,   815,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03415       -1,    -1,   804,    -1,    -1,    -1,    -1,    -1,    -1,   666,
03416       -1,    -1,    -1,   815,    -1,    -1,    -1,   840,    -1,    -1,
03417       -1,    -1,   737,    -1,   847,   848,    -1,    -1,   851,    -1,
03418      745,    -1,    -1,    -1,    -1,    -1,    -1,   694,   840,    -1,
03419       -1,    -1,    -1,    -1,    -1,   847,   848,    -1,    -1,   851,
03420       -1,    -1,    -1,    -1,   877,   878,    -1,    -1,   715,    -1,
03421       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03422      893,    -1,    -1,    -1,    -1,   877,   878,    -1,    -1,    -1,
03423       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03424       -1,   893,    -1,    -1,   896,    -1,    -1,    -1,   921,    -1,
03425      815,    70,    71,    72,    73,    74,    75,    76,    -1,   932,
03426       79,    80,    -1,    -1,    -1,   917,    85,    86,    -1,   921,
03427      777,    -1,    -1,    -1,    -1,   840,    -1,    -1,    -1,    -1,
03428      932,    -1,   847,   848,    -1,    -1,   851,    -1,    -1,    -1,
03429       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   118,
03430      119,   120,   121,   122,   123,   124,   125,   126,   127,   982,
03431      817,   984,   877,   878,    -1,    -1,    -1,   990,    -1,   992,
03432       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   893,    -1,
03433      982,    -1,   984,    -1,    -1,    -1,    -1,    -1,   990,    -1,
03434      992,    -1,    -1,   850,    70,    71,    72,    73,    74,    75,
03435       76,    -1,   917,    79,    80,    -1,   921,    -1,    -1,    85,
03436       86,   868,    -1,    -1,    -1,    -1,    -1,   932,    -1,    -1,
03437       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03438       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03439       -1,    -1,   118,   119,   120,   121,   122,   123,   124,   125,
03440      126,   127,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03441       -1,    -1,    -1,    -1,    -1,    -1,    -1,   982,    -1,   984,
03442       -1,    -1,    -1,    -1,    -1,   990,    -1,   992,     0,     1,
03443       -1,     3,     4,     5,     6,     7,    -1,    -1,    -1,    11,
03444       12,    -1,    -1,    -1,    16,    -1,    18,    19,    20,    21,
03445       22,    23,    24,    -1,    -1,    -1,    -1,    -1,    30,    31,
03446       32,    33,    34,    35,    36,    -1,    -1,    39,    -1,    -1,
03447       -1,    -1,    -1,    45,    46,    47,    48,    49,    50,    51,
03448       52,    53,    54,    55,    56,    57,    -1,    59,    60,    61,
03449       62,    -1,    64,    65,    66,    -1,    68,    69,    -1,    -1,
03450       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03451       -1,    -1,    -1,    -1,    -1,    -1,    88,    -1,    -1,    91,
03452       92,    -1,    94,    95,    -1,    97,    -1,    -1,   100,   101,
03453      102,   103,   104,   105,   106,   107,   108,     0,    -1,    -1,
03454       -1,    -1,    -1,    -1,    -1,     8,     9,    10,    -1,    -1,
03455       13,    14,    15,    -1,    17,    -1,   128,   129,   130,    -1,
03456       44,    -1,    -1,    26,    27,    28,    29,    -1,    -1,   141,
03457       -1,   143,    -1,    -1,    37,    38,    -1,    40,    41,    42,
03458       43,    44,    -1,    -1,    -1,    -1,    70,    71,    72,    73,
03459       74,    75,    76,    77,    78,    79,    80,    81,    82,    -1,
03460       -1,    85,    86,    -1,    -1,    -1,    -1,    70,    71,    72,
03461       73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
03462       -1,    -1,    85,    86,    87,    -1,    89,    90,    -1,    -1,
03463       -1,    -1,   116,    96,   118,   119,   120,   121,   122,   123,
03464      124,   125,   126,   127,    -1,    -1,    -1,   110,    -1,    -1,
03465      113,    -1,   115,   116,   117,   118,   119,   120,   121,   122,
03466      123,   124,   125,   126,   127,    -1,    -1,    -1,    -1,   132,
03467      133,   134,   135,   136,     0,    -1,   139,   140,   141,    -1,
03468      143,    -1,     8,     9,    10,    -1,    -1,    13,    14,    15,
03469       -1,    17,    -1,    -1,    -1,    -1,    -1,    44,    -1,    25,
03470       -1,    27,    28,    29,    -1,    -1,    -1,    -1,    -1,    -1,
03471       -1,    37,    38,    -1,    40,    41,    42,    43,    44,    -1,
03472       -1,    -1,    -1,    70,    71,    72,    73,    74,    75,    76,
03473       77,    78,    79,    80,    81,    82,    -1,    -1,    85,    86,
03474       -1,    -1,    -1,    -1,    70,    71,    72,    73,    74,    75,
03475       76,    77,    78,    79,    80,    81,    82,    -1,    -1,    85,
03476       86,    87,    -1,    89,    90,    -1,    -1,    -1,    -1,   116,
03477       96,   118,   119,   120,   121,   122,   123,   124,   125,   126,
03478      127,    -1,    -1,    -1,   110,    -1,    -1,   113,    -1,   115,
03479      116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
03480      126,   127,    -1,    -1,    -1,    -1,    -1,   133,   134,   135,
03481      136,     0,    -1,   139,   140,   141,    -1,   143,    -1,     8,
03482        9,    10,    -1,    -1,    13,    14,    15,    -1,    17,    -1,
03483       -1,    -1,    -1,    -1,    -1,    -1,    25,    -1,    27,    28,
03484       29,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    37,    38,
03485       -1,    40,    41,    42,    43,    44,    -1,    -1,    -1,    -1,
03486       70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
03487       80,    81,    82,    -1,    -1,    85,    86,    -1,    -1,    -1,
03488       -1,    70,    71,    72,    73,    74,    75,    76,    77,    78,
03489       79,    80,    81,    82,    -1,    -1,    85,    86,    87,    -1,
03490       89,    90,    -1,    -1,    -1,    -1,   116,    96,   118,   119,
03491      120,   121,   122,   123,   124,   125,   126,   127,    -1,    -1,
03492       -1,   110,    -1,    -1,   113,    -1,   115,   116,   117,   118,
03493      119,   120,   121,   122,   123,   124,   125,   126,   127,    -1,
03494       -1,    -1,    -1,    -1,   133,   134,   135,   136,     0,    -1,
03495      139,   140,   141,    -1,   143,    -1,     8,     9,    10,    -1,
03496       -1,    13,    14,    15,    -1,    17,    -1,    -1,    -1,    -1,
03497       -1,    44,    -1,    -1,    26,    27,    28,    29,    -1,    -1,
03498       -1,    -1,    -1,    -1,    -1,    37,    38,    -1,    40,    41,
03499       42,    43,    44,    -1,    -1,    -1,    -1,    70,    71,    72,
03500       73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
03501       -1,    -1,    85,    86,    -1,    -1,    -1,    -1,    70,    71,
03502       72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
03503       82,    -1,    -1,    85,    86,    87,    -1,    -1,    90,    -1,
03504       -1,    -1,    -1,   116,    96,   118,   119,   120,   121,   122,
03505      123,   124,   125,   126,   127,    -1,    -1,    -1,   110,    -1,
03506       -1,   113,    -1,   136,   116,   117,   118,   119,   120,   121,
03507      122,   123,   124,   125,   126,   127,    -1,    -1,    -1,    -1,
03508      132,   133,   134,   135,   136,     0,    -1,   139,   140,   141,
03509       -1,   143,    -1,     8,     9,    10,    -1,    -1,    13,    14,
03510       15,    -1,    17,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03511       -1,    26,    27,    28,    29,    -1,    -1,    -1,    -1,    -1,
03512       -1,    -1,    37,    38,    -1,    40,    41,    42,    43,    44,
03513       -1,    -1,    -1,    -1,    70,    71,    72,    73,    74,    75,
03514       76,    77,    78,    79,    80,    81,    82,    -1,    -1,    85,
03515       86,    -1,    -1,    -1,    -1,    70,    71,    72,    73,    74,
03516       75,    76,    77,    78,    79,    80,    81,    82,    -1,    -1,
03517       85,    86,    87,    -1,    -1,    90,    -1,    -1,    -1,    -1,
03518       -1,    96,   118,   119,   120,   121,   122,   123,   124,   125,
03519      126,   127,    -1,    -1,    -1,   110,    -1,    -1,   113,    -1,
03520       -1,   116,   117,   118,   119,   120,   121,   122,   123,   124,
03521      125,   126,   127,    -1,    -1,    -1,    -1,   132,   133,   134,
03522      135,   136,     0,    -1,   139,   140,   141,    -1,   143,    -1,
03523        8,     9,    10,    -1,    -1,    13,    14,    15,    -1,    17,
03524       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    27,
03525       28,    29,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    37,
03526       38,    -1,    40,    41,    42,    43,    44,    -1,    -1,    -1,
03527       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03528       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03529       -1,    -1,    70,    71,    72,    73,    74,    75,    76,    77,
03530       78,    79,    80,    81,    82,    -1,    -1,    85,    86,    87,
03531       -1,    89,    90,    -1,    -1,    -1,    -1,    -1,    96,    -1,
03532       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03533       -1,    -1,   110,    -1,    -1,   113,    -1,   115,   116,   117,
03534      118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
03535       -1,    -1,    -1,    -1,    -1,   133,   134,   135,   136,     0,
03536       -1,   139,   140,   141,    -1,   143,    -1,     8,     9,    10,
03537       -1,    -1,    13,    14,    15,    -1,    17,    -1,    -1,    -1,
03538       -1,    -1,    -1,    -1,    -1,    26,    27,    28,    -1,    -1,
03539       -1,    -1,    -1,    -1,    -1,    -1,    37,    38,    -1,    40,
03540       41,    42,    43,    44,    -1,    -1,    -1,    -1,    -1,    -1,
03541       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03542       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    70,
03543       71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
03544       81,    82,    -1,    -1,    85,    86,    87,    -1,    -1,    90,
03545       -1,    -1,    -1,    -1,    -1,    96,    -1,    -1,    -1,    -1,
03546       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   110,
03547       -1,    -1,    -1,    -1,    -1,   116,    -1,   118,   119,   120,
03548      121,   122,   123,   124,   125,   126,   127,    -1,    -1,    -1,
03549       -1,   132,   133,   134,   135,   136,     0,   138,   139,   140,
03550      141,    -1,   143,    -1,     8,     9,    10,    -1,    -1,    13,
03551       14,    15,    -1,    17,    -1,    -1,    -1,    -1,    -1,    -1,
03552       -1,    -1,    -1,    27,    28,    29,    -1,    -1,    -1,    -1,
03553       -1,    -1,    -1,    37,    38,    -1,    40,    41,    42,    43,
03554       44,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03555       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03556       -1,    -1,    -1,    -1,    -1,    -1,    70,    71,    72,    73,
03557       74,    75,    76,    77,    78,    79,    80,    81,    82,    -1,
03558       -1,    85,    86,    87,    -1,    -1,    90,    -1,    -1,    -1,
03559       -1,    -1,    96,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03560       -1,    -1,    -1,    -1,    -1,    -1,   110,    -1,    -1,   113,
03561       -1,    -1,   116,   117,   118,   119,   120,   121,   122,   123,
03562      124,   125,   126,   127,    -1,    -1,    -1,    -1,    -1,   133,
03563      134,   135,   136,     0,    -1,   139,   140,   141,    -1,   143,
03564       -1,     8,     9,    10,    -1,    -1,    13,    14,    15,    -1,
03565       17,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    26,
03566       27,    28,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03567       37,    38,    -1,    40,    41,    42,    43,    44,    -1,    -1,
03568       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03569       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03570       -1,    -1,    -1,    70,    71,    72,    73,    74,    75,    76,
03571       77,    78,    79,    80,    81,    82,    -1,    -1,    85,    86,
03572       87,    -1,    -1,    90,    -1,    -1,    -1,    -1,    -1,    96,
03573       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03574       -1,    -1,    -1,   110,    -1,    -1,    -1,    -1,    -1,   116,
03575       -1,   118,   119,   120,   121,   122,   123,   124,   125,   126,
03576      127,    -1,    -1,    -1,    -1,   132,   133,   134,   135,   136,
03577        0,   138,   139,   140,   141,    -1,   143,    -1,     8,     9,
03578       10,    -1,    -1,    13,    14,    15,    -1,    17,    -1,    -1,
03579       -1,    -1,    -1,    -1,    -1,    -1,    -1,    27,    28,    -1,
03580       -1,    -1,    -1,    -1,    -1,    -1,    -1,    37,    38,    -1,
03581       40,    41,    42,    43,    44,    -1,    -1,    -1,    -1,    -1,
03582       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03583       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03584       70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
03585       80,    81,    82,    -1,    -1,    85,    86,    87,    -1,    -1,
03586       90,    -1,    -1,    -1,    -1,    -1,    96,    -1,    -1,    -1,
03587       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03588      110,    -1,    -1,    -1,    -1,    -1,   116,    -1,   118,   119,
03589      120,   121,   122,   123,   124,   125,   126,   127,    -1,    -1,
03590       -1,    -1,    -1,   133,   134,   135,   136,     0,   138,   139,
03591      140,   141,    -1,   143,    -1,     8,     9,    10,    -1,    -1,
03592       -1,    14,    15,    -1,    17,    -1,    -1,    -1,    -1,    -1,
03593       -1,    -1,    -1,    26,    -1,    -1,    -1,    -1,    -1,    -1,
03594       -1,    -1,    -1,    -1,    37,    38,    -1,    40,    41,    42,
03595       43,    44,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03596       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03597       -1,    -1,    -1,    -1,    -1,    -1,    -1,    70,    71,    72,
03598       73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
03599       -1,    -1,    85,    86,    87,    -1,    89,    -1,    -1,    -1,
03600       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03601       -1,    -1,    -1,    -1,    -1,    -1,    -1,   110,    -1,    -1,
03602       -1,    -1,   115,   116,    -1,   118,   119,   120,   121,   122,
03603      123,   124,   125,   126,   127,    -1,    -1,    -1,    -1,   132,
03604      133,   134,   135,   136,     0,    -1,   139,    -1,   141,    -1,
03605      143,    -1,     8,     9,    10,    -1,    -1,    -1,    14,    15,
03606       -1,    17,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03607       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03608       -1,    37,    38,    -1,    40,    41,    42,    43,    44,    -1,
03609       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03610       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03611       -1,    -1,    -1,    -1,    70,    71,    72,    73,    74,    75,
03612       76,    77,    78,    79,    80,    81,    82,    -1,    -1,    85,
03613       86,    87,    -1,    89,    -1,    -1,    -1,    -1,    -1,    -1,
03614       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03615       -1,    -1,    -1,    -1,   110,    -1,    -1,    -1,    -1,   115,
03616      116,    -1,   118,   119,   120,   121,   122,   123,   124,   125,
03617      126,   127,    -1,    -1,    -1,    -1,    -1,   133,   134,   135,
03618      136,    -1,    -1,   139,    -1,   141,     1,   143,     3,     4,
03619        5,     6,     7,     8,     9,    10,    11,    12,    -1,    -1,
03620       15,    16,    -1,    18,    19,    20,    21,    22,    23,    24,
03621       -1,    -1,    -1,    -1,    -1,    30,    31,    32,    33,    34,
03622       35,    36,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,
03623       45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
03624       55,    56,    57,    -1,    59,    60,    61,    62,    -1,    64,
03625       65,    66,    -1,    68,    69,    -1,    -1,    -1,    -1,    -1,
03626       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03627       -1,    -1,    -1,    88,    -1,    -1,    91,    92,    -1,    94,
03628       95,    -1,    97,    -1,    -1,   100,   101,   102,   103,   104,
03629      105,   106,   107,   108,    -1,    -1,    -1,    -1,    -1,    -1,
03630       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03631       -1,    -1,    -1,   128,   129,   130,    -1,    -1,    -1,    -1,
03632       -1,    -1,    -1,    -1,    -1,    -1,   141,     1,   143,     3,
03633        4,     5,     6,     7,    -1,    -1,    10,    11,    12,    -1,
03634       14,    15,    16,    -1,    18,    19,    20,    21,    22,    23,
03635       24,    -1,    -1,    -1,    -1,    -1,    30,    31,    32,    33,
03636       34,    35,    36,    -1,    -1,    39,    -1,    -1,    -1,    -1,
03637       -1,    45,    46,    47,    48,    49,    50,    51,    52,    53,
03638       54,    55,    56,    57,    -1,    59,    60,    61,    62,    -1,
03639       64,    65,    66,    -1,    68,    69,    -1,    -1,    -1,    -1,
03640       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03641       -1,    -1,    -1,    -1,    88,    -1,    -1,    91,    92,    -1,
03642       94,    95,    -1,    97,    -1,    -1,   100,   101,   102,   103,
03643      104,   105,   106,   107,   108,    -1,    -1,    -1,    -1,    -1,
03644       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03645       -1,    -1,    -1,    -1,   128,   129,   130,    -1,    -1,    -1,
03646       -1,    -1,    -1,    -1,    -1,    -1,    -1,   141,     1,   143,
03647        3,     4,     5,     6,     7,    -1,    -1,    10,    11,    12,
03648       -1,    -1,    15,    16,    17,    18,    19,    20,    21,    22,
03649       23,    24,    -1,    -1,    -1,    -1,    -1,    30,    31,    32,
03650       33,    34,    35,    36,    -1,    -1,    39,    -1,    -1,    -1,
03651       -1,    -1,    45,    46,    47,    48,    49,    50,    51,    52,
03652       53,    54,    55,    56,    57,    -1,    59,    60,    61,    62,
03653       -1,    64,    65,    66,    -1,    68,    69,    -1,    -1,    -1,
03654       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03655       -1,    -1,    -1,    -1,    -1,    88,    -1,    -1,    91,    92,
03656       -1,    94,    95,    -1,    97,    -1,    -1,   100,   101,   102,
03657      103,   104,   105,   106,   107,   108,    -1,    -1,    -1,    -1,
03658       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03659       -1,    -1,    -1,    -1,    -1,   128,   129,   130,    -1,    -1,
03660       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   141,     1,
03661      143,     3,     4,     5,     6,     7,    -1,    -1,    10,    11,
03662       12,    -1,    -1,    15,    16,    -1,    18,    19,    20,    21,
03663       22,    23,    24,    -1,    -1,    -1,    -1,    -1,    30,    31,
03664       32,    33,    34,    35,    36,    -1,    -1,    39,    -1,    -1,
03665       -1,    -1,    -1,    45,    46,    47,    48,    49,    50,    51,
03666       52,    53,    54,    55,    56,    57,    -1,    59,    60,    61,
03667       62,    -1,    64,    65,    66,    -1,    68,    69,    -1,    -1,
03668       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03669       -1,    -1,    -1,    -1,    -1,    -1,    88,    -1,    -1,    91,
03670       92,    -1,    94,    95,    -1,    97,    -1,    -1,   100,   101,
03671      102,   103,   104,   105,   106,   107,   108,    -1,    -1,    -1,
03672       -1,    -1,    -1,    -1,     1,    -1,     3,     4,     5,     6,
03673        7,    -1,     9,    10,    11,    12,   128,   129,   130,    16,
03674       -1,    18,    19,    20,    21,    22,    23,    24,    -1,   141,
03675       -1,   143,    -1,    30,    31,    32,    33,    34,    35,    36,
03676       -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    45,    46,
03677       47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
03678       57,    -1,    59,    60,    61,    62,    -1,    64,    65,    66,
03679       -1,    68,    69,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03680       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03681       -1,    88,    -1,    -1,    91,    92,    -1,    94,    95,    -1,
03682       97,    -1,    -1,   100,   101,   102,   103,   104,   105,   106,
03683      107,   108,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     1,
03684       -1,     3,     4,     5,     6,     7,    -1,    -1,    -1,    11,
03685       12,   128,   129,   130,    16,    -1,    18,    19,    20,    21,
03686       22,    23,    24,    -1,   141,    -1,   143,    -1,    30,    31,
03687       32,    33,    34,    35,    36,    -1,    -1,    39,    -1,    -1,
03688       -1,    -1,    -1,    45,    46,    47,    48,    49,    50,    51,
03689       52,    53,    54,    55,    56,    57,    -1,    59,    60,    61,
03690       62,    -1,    64,    65,    66,    -1,    68,    69,    -1,    -1,
03691       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03692       -1,    -1,    -1,    -1,    -1,    -1,    88,    -1,    -1,    91,
03693       92,    -1,    94,    95,    -1,    97,    -1,    -1,   100,   101,
03694      102,   103,   104,   105,   106,   107,   108,    -1,    -1,    -1,
03695       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03696       -1,    -1,    -1,    -1,    -1,    -1,   128,   129,   130,    -1,
03697       -1,    -1,    -1,    -1,    -1,    -1,    -1,   139,    -1,   141,
03698        1,   143,     3,     4,     5,     6,     7,    -1,    -1,    -1,
03699       11,    12,    -1,    -1,    -1,    16,    -1,    18,    19,    20,
03700       21,    22,    23,    24,    -1,    -1,    -1,    -1,    -1,    30,
03701       31,    32,    33,    34,    35,    36,    -1,    -1,    39,    -1,
03702       -1,    -1,    -1,    -1,    45,    46,    47,    48,    49,    50,
03703       51,    52,    53,    54,    55,    56,    57,    -1,    59,    60,
03704       61,    62,    -1,    64,    65,    66,    -1,    68,    69,    -1,
03705       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03706       -1,    -1,    -1,    -1,    -1,    -1,    -1,    88,    -1,    -1,
03707       91,    92,    -1,    94,    95,    -1,    97,    -1,    -1,   100,
03708      101,   102,   103,   104,   105,   106,   107,   108,    -1,    -1,
03709       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03710       -1,    -1,    -1,    -1,    -1,    -1,    -1,   128,   129,   130,
03711       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   139,    -1,
03712      141,     1,   143,     3,     4,     5,     6,     7,    -1,    -1,
03713       -1,    11,    12,    -1,    -1,    -1,    16,    -1,    18,    19,
03714       20,    21,    22,    23,    24,    -1,    -1,    -1,    -1,    -1,
03715       30,    31,    32,    33,    34,    35,    36,    -1,    -1,    39,
03716       -1,    -1,    -1,    -1,    -1,    45,    46,    47,    48,    49,
03717       50,    51,    52,    53,    54,    55,    56,    57,    -1,    59,
03718       60,    61,    62,    -1,    64,    65,    66,    -1,    68,    69,
03719       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03720       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    88,    -1,
03721       -1,    91,    92,    -1,    94,    95,    -1,    97,    -1,    -1,
03722      100,   101,   102,   103,   104,   105,   106,   107,   108,    -1,
03723       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03724       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   128,   129,
03725      130,    -1,    -1,   133,     1,    -1,     3,     4,     5,     6,
03726        7,   141,    -1,   143,    11,    12,    -1,    -1,    -1,    16,
03727       -1,    18,    19,    20,    21,    22,    23,    24,    -1,    -1,
03728       -1,    -1,    -1,    30,    31,    32,    33,    34,    35,    36,
03729       -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    45,    46,
03730       47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
03731       57,    -1,    59,    60,    61,    62,    -1,    64,    65,    66,
03732       -1,    68,    69,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03733       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03734       -1,    88,    -1,    -1,    91,    92,    -1,    94,    95,    -1,
03735       97,    -1,    -1,   100,   101,   102,   103,   104,   105,   106,
03736      107,   108,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03737       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03738       -1,   128,   129,   130,    -1,    -1,   133,    -1,    -1,    -1,
03739       -1,    -1,    -1,    -1,   141,     1,   143,     3,     4,     5,
03740        6,     7,    -1,    -1,    10,    11,    12,    -1,    -1,    -1,
03741       16,    -1,    18,    19,    20,    21,    22,    23,    24,    -1,
03742       -1,    -1,    -1,    -1,    30,    31,    32,    33,    34,    35,
03743       36,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    45,
03744       46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
03745       56,    57,    -1,    59,    60,    61,    62,    -1,    64,    65,
03746       66,    -1,    68,    69,    -1,    -1,    -1,    -1,    -1,    -1,
03747       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03748       -1,    -1,    88,    -1,    -1,    91,    92,    -1,    94,    95,
03749       -1,    97,    -1,    -1,   100,   101,   102,   103,   104,   105,
03750      106,   107,   108,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03751        1,    -1,     3,     4,     5,     6,     7,    -1,    -1,    -1,
03752       11,    12,   128,   129,   130,    16,    -1,    18,    19,    20,
03753       21,    22,    23,    24,    -1,   141,    -1,   143,    -1,    30,
03754       31,    32,    33,    34,    35,    36,    -1,    -1,    39,    -1,
03755       -1,    -1,    -1,    -1,    45,    46,    47,    48,    49,    50,
03756       51,    52,    53,    54,    55,    56,    57,    -1,    59,    60,
03757       61,    62,    -1,    64,    65,    66,    -1,    68,    69,    -1,
03758       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03759       -1,    -1,    -1,    -1,    -1,    -1,    -1,    88,    -1,    -1,
03760       91,    92,    -1,    94,    95,    -1,    97,    -1,    -1,   100,
03761      101,   102,   103,   104,   105,   106,   107,   108,    -1,   110,
03762       -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,
03763       -1,     7,    -1,    -1,    -1,    11,    12,   128,   129,   130,
03764       16,    -1,    18,    19,    20,    21,    22,    23,    24,    -1,
03765      141,    -1,   143,    -1,    30,    31,    32,    33,    34,    35,
03766       36,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,
03767       46,    -1,    -1,    49,    50,    51,    52,    53,    54,    55,
03768       56,    57,    58,    59,    60,    61,    62,    -1,    64,    65,
03769       66,    -1,    68,    69,    -1,    -1,    -1,    -1,    -1,    -1,
03770       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03771       -1,    -1,    88,    -1,    -1,    91,    92,    -1,    94,    95,
03772       -1,    97,    98,    99,   100,   101,   102,   103,   104,   105,
03773      106,   107,   108,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03774       -1,    -1,     3,     4,     5,    -1,     7,    -1,    -1,    -1,
03775       11,    12,   128,   129,   130,    16,    -1,    18,    19,    20,
03776       21,    22,    23,    24,    -1,    -1,    -1,   143,    -1,    30,
03777       31,    32,    33,    34,    35,    36,    -1,    -1,    39,    -1,
03778       -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,    49,    50,
03779       51,    52,    53,    54,    55,    56,    57,    -1,    59,    60,
03780       61,    62,    -1,    64,    65,    66,    -1,    68,    69,    -1,
03781       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03782       -1,    -1,    -1,    -1,    -1,    -1,    -1,    88,    -1,    -1,
03783       91,    92,    -1,    94,    95,    -1,    -1,    -1,    -1,   100,
03784      101,   102,   103,   104,   105,   106,   107,   108,    -1,    -1,
03785       -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,
03786       -1,     7,    -1,    -1,    -1,    11,    12,   128,   129,   130,
03787       16,    -1,    18,    19,    20,    21,    22,    23,    24,    -1,
03788      141,    -1,   143,    -1,    30,    31,    32,    33,    34,    35,
03789       36,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,
03790       46,    -1,    -1,    49,    50,    51,    52,    53,    54,    55,
03791       56,    57,    -1,    59,    60,    61,    62,    -1,    64,    65,
03792       66,    -1,    68,    69,    -1,    -1,    -1,    -1,    -1,    -1,
03793       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03794       -1,    -1,    88,    -1,    -1,    91,    92,    -1,    94,    95,
03795       -1,    -1,    -1,    -1,   100,   101,   102,   103,   104,   105,
03796      106,   107,   108,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03797       -1,    -1,     3,     4,     5,     6,     7,    -1,    -1,    -1,
03798       11,    12,   128,   129,   130,    16,    -1,    18,    19,    20,
03799       21,    22,    23,    24,    -1,    -1,    -1,   143,    -1,    30,
03800       31,    32,    33,    34,    35,    36,    -1,    -1,    39,    -1,
03801       -1,    -1,    -1,    -1,    45,    46,    47,    48,    49,    50,
03802       51,    52,    53,    54,    55,    56,    57,    -1,    59,    60,
03803       61,    62,    -1,    64,    65,    66,    -1,    68,    69,    -1,
03804       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03805       -1,    -1,    -1,    -1,    -1,    -1,    -1,    88,    -1,    -1,
03806       91,    92,    -1,    94,    95,    -1,    97,    -1,    -1,   100,
03807      101,   102,   103,   104,   105,   106,   107,   108,    -1,    -1,
03808       -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,
03809        6,     7,    -1,    -1,    -1,    11,    12,   128,   129,   130,
03810       16,    -1,    18,    19,    20,    21,    22,    23,    24,    -1,
03811      141,    -1,    -1,    -1,    30,    31,    32,    33,    34,    35,
03812       36,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    45,
03813       46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
03814       56,    57,    -1,    59,    60,    61,    62,    -1,    64,    65,
03815       66,    -1,    68,    69,    -1,    -1,    -1,    -1,    -1,    -1,
03816       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03817       -1,    -1,    88,    -1,    -1,    91,    92,    -1,    94,    95,
03818       -1,    97,    -1,    -1,   100,   101,   102,   103,   104,   105,
03819      106,   107,   108,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03820       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03821       -1,    -1,   128,   129,   130,    -1,    -1,    -1,    -1,    -1,
03822       -1,    -1,    -1,    -1,    -1,   141,     3,     4,     5,     6,
03823        7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
03824       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
03825       -1,    -1,    -1,    30,    31,    32,    33,    34,    35,    36,
03826       37,    38,    39,    -1,    -1,    -1,    -1,    -1,    45,    46,
03827       47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
03828       57,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03829       -1,    68,    69,    70,    71,    72,    73,    74,    75,    76,
03830       -1,    -1,    79,    80,    -1,    -1,    83,    84,    85,    86,
03831       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03832       97,    98,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03833       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03834       -1,   118,   119,   120,   121,   122,   123,   124,   125,   126,
03835      127,    -1,   129,   130,    -1,    -1,    -1,    -1,    -1,    -1,
03836      137,   138,     3,     4,     5,     6,     7,     8,     9,    10,
03837       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
03838       21,    22,    23,    24,    25,    26,    -1,    -1,    -1,    30,
03839       31,    32,    33,    34,    35,    36,    37,    38,    39,    -1,
03840       -1,    -1,    -1,    -1,    45,    46,    47,    48,    49,    50,
03841       51,    52,    53,    54,    55,    56,    57,    -1,    -1,    -1,
03842       -1,    -1,    -1,    -1,    -1,    -1,    -1,    68,    69,    70,
03843       71,    72,    73,    74,    75,    76,    -1,    -1,    79,    80,
03844       -1,    -1,    83,    84,    85,    86,    -1,    -1,    -1,    -1,
03845       -1,    -1,    -1,    -1,    -1,    -1,    97,    98,    -1,    -1,
03846       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03847       -1,    -1,    -1,    -1,    -1,    -1,    -1,   118,   119,   120,
03848      121,   122,   123,   124,   125,   126,   127,    -1,   129,   130,
03849       -1,    -1,    -1,    -1,    -1,    -1,   137,     3,     4,     5,
03850        6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
03851       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
03852       26,    -1,    -1,    -1,    30,    31,    32,    33,    34,    35,
03853       36,    37,    38,    39,    -1,    -1,    -1,    -1,    -1,    45,
03854       46,    47,    48,    49,    50,    51,    52,    53,    54,    -1,
03855       56,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03856       -1,    -1,    68,    69,    70,    71,    72,    73,    74,    75,
03857       76,    -1,    -1,    79,    80,    -1,    -1,    83,    84,    85,
03858       86,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03859       -1,    97,    98,    -1,    -1,   101,    -1,    -1,    -1,    -1,
03860       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03861       -1,    -1,   118,   119,   120,   121,   122,   123,   124,   125,
03862      126,   127,    -1,   129,   130,    -1,    -1,    -1,    -1,    -1,
03863       -1,   137,     3,     4,     5,     6,     7,     8,     9,    10,
03864       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
03865       21,    22,    23,    24,    25,    26,    -1,    -1,    -1,    30,
03866       31,    32,    33,    34,    35,    36,    37,    38,    39,    -1,
03867       -1,    -1,    -1,    -1,    45,    46,    47,    48,    49,    50,
03868       51,    52,    53,    -1,    -1,    56,    -1,    -1,    -1,    -1,
03869       -1,    -1,    -1,    -1,    -1,    -1,    -1,    68,    69,    70,
03870       71,    72,    73,    74,    75,    76,    -1,    -1,    79,    80,
03871       -1,    -1,    83,    84,    85,    86,    -1,    -1,    -1,    -1,
03872       -1,    -1,    -1,    -1,    -1,    -1,    97,    98,    -1,    -1,
03873      101,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03874       -1,    -1,    -1,    -1,    -1,    -1,    -1,   118,   119,   120,
03875      121,   122,   123,   124,   125,   126,   127,    -1,   129,   130,
03876       -1,    -1,    -1,    -1,    -1,    -1,   137,     3,     4,     5,
03877        6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
03878       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
03879       26,    -1,    -1,    -1,    30,    31,    32,    33,    34,    35,
03880       36,    37,    38,    39,    -1,    -1,    -1,    -1,    -1,    45,
03881       46,    47,    48,    49,    50,    51,    52,    53,    -1,    -1,
03882       56,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03883       -1,    -1,    68,    69,    70,    71,    72,    73,    74,    75,
03884       76,    -1,    -1,    79,    80,    -1,    -1,    83,    84,    85,
03885       86,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03886       -1,    97,    98,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03887       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03888       -1,    -1,   118,   119,   120,   121,   122,   123,   124,   125,
03889      126,   127,    -1,   129,   130,     3,     4,     5,    -1,     7,
03890       -1,   137,    -1,    11,    12,    -1,    -1,    -1,    16,    -1,
03891       18,    19,    20,    21,    22,    23,    24,    -1,    -1,    -1,
03892       -1,    -1,    30,    31,    32,    33,    34,    35,    36,    -1,
03893       -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,    46,    -1,
03894       -1,    49,    50,    51,    52,    53,    54,    55,    56,    57,
03895       -1,    59,    60,    61,    62,    -1,    64,    65,    66,    -1,
03896       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03897       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03898       88,    -1,    -1,    91,    92,    -1,    94,    95,    -1,    -1,
03899       -1,    -1,   100,   101,   102,   103,   104,   105,   106,   107,
03900      108,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,    -1,
03901        7,    -1,    -1,    -1,    11,    12,    -1,    -1,    -1,    16,
03902      128,    18,    19,    20,    21,    22,    23,    24,   136,    -1,
03903       -1,    -1,    -1,    30,    31,    32,    33,    34,    35,    36,
03904       -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,    46,
03905       -1,    -1,    49,    50,    51,    52,    53,    54,    55,    56,
03906       57,    -1,    59,    60,    61,    62,    -1,    64,    65,    66,
03907       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03908       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03909       -1,    88,    -1,    -1,    91,    92,    -1,    94,    95,    -1,
03910       -1,    -1,    -1,   100,   101,   102,   103,   104,   105,   106,
03911      107,   108,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,
03912        6,     7,    -1,    -1,    -1,    11,    12,    -1,    -1,    -1,
03913       16,   128,    18,    19,    20,    21,    22,    23,    24,   136,
03914       -1,    -1,    -1,    -1,    30,    31,    32,    33,    34,    35,
03915       36,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    45,
03916       46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
03917       56,    57,    -1,    59,    60,    61,    62,    -1,    64,    65,
03918       66,    -1,    68,    69,    -1,    -1,    -1,    -1,    -1,    -1,
03919       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03920       -1,    -1,    88,    -1,    -1,    91,    92,    -1,    94,    95,
03921       -1,    97,    -1,    -1,   100,   101,   102,   103,   104,   105,
03922      106,   107,   108,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03923       -1,    -1,     3,     4,     5,    -1,     7,    -1,    -1,    -1,
03924       11,    12,   128,   129,   130,    16,    -1,    18,    19,    20,
03925       21,    22,    23,    24,    -1,    -1,    -1,    -1,    -1,    30,
03926       31,    32,    33,    34,    35,    36,    -1,    -1,    39,    -1,
03927       -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,    49,    50,
03928       51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
03929       61,    62,    -1,    64,    65,    66,    -1,    68,    69,    -1,
03930       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03931       -1,    -1,    -1,    -1,    -1,    -1,    -1,    88,    -1,    -1,
03932       91,    92,    -1,    94,    95,    -1,    97,    98,    99,   100,
03933      101,   102,   103,   104,   105,   106,   107,   108,    -1,    -1,
03934       -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,
03935        6,     7,    -1,    -1,    -1,    11,    12,   128,   129,   130,
03936       16,    -1,    18,    19,    20,    21,    22,    23,    24,    -1,
03937       -1,    -1,    -1,    -1,    30,    31,    32,    33,    34,    35,
03938       36,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    45,
03939       46,    -1,    48,    49,    50,    51,    52,    53,    54,    55,
03940       56,    57,    -1,    59,    60,    61,    62,    -1,    64,    65,
03941       66,    -1,    68,    69,    -1,    -1,    -1,    -1,    -1,    -1,
03942       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03943       -1,    -1,    88,    -1,    -1,    91,    92,    -1,    94,    95,
03944       -1,    97,    -1,    -1,   100,   101,   102,   103,   104,   105,
03945      106,   107,   108,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03946       -1,    -1,     3,     4,     5,    -1,     7,    -1,    -1,    -1,
03947       11,    12,   128,   129,   130,    16,    -1,    18,    19,    20,
03948       21,    22,    23,    24,    -1,    -1,    -1,    -1,    -1,    30,
03949       31,    32,    33,    34,    35,    36,    -1,    -1,    39,    -1,
03950       -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,    49,    50,
03951       51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
03952       61,    62,    -1,    64,    65,    66,    -1,    68,    69,    -1,
03953       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03954       -1,    -1,    -1,    -1,    -1,    -1,    -1,    88,    -1,    -1,
03955       91,    92,    -1,    94,    95,    -1,    97,    98,    99,   100,
03956      101,   102,   103,   104,   105,   106,   107,   108,    -1,    -1,
03957       -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,
03958       -1,     7,    -1,    -1,    -1,    11,    12,   128,   129,   130,
03959       16,    -1,    18,    19,    20,    21,    22,    23,    24,    -1,
03960       -1,    -1,    -1,    -1,    30,    31,    32,    33,    34,    35,
03961       36,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,
03962       46,    -1,    -1,    49,    50,    51,    52,    53,    54,    55,
03963       56,    57,    58,    59,    60,    61,    62,    -1,    64,    65,
03964       66,    -1,    68,    69,    -1,    -1,    -1,    -1,    -1,    -1,
03965       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03966       -1,    -1,    88,    -1,    -1,    91,    92,    -1,    94,    95,
03967       -1,    97,    98,    -1,   100,   101,   102,   103,   104,   105,
03968      106,   107,   108,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03969       -1,    -1,     3,     4,     5,    -1,     7,    -1,    -1,    -1,
03970       11,    12,   128,   129,   130,    16,    -1,    18,    19,    20,
03971       21,    22,    23,    24,    -1,    -1,    -1,    -1,    -1,    30,
03972       31,    32,    33,    34,    35,    36,    -1,    -1,    39,    -1,
03973       -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,    49,    50,
03974       51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
03975       61,    62,    -1,    64,    65,    66,    -1,    68,    69,    -1,
03976       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03977       -1,    -1,    -1,    -1,    -1,    -1,    -1,    88,    -1,    -1,
03978       91,    92,    -1,    94,    95,    -1,    -1,    98,    99,   100,
03979      101,   102,   103,   104,   105,   106,   107,   108,    -1,    -1,
03980       -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,
03981       -1,     7,    -1,    -1,    -1,    11,    12,   128,   129,   130,
03982       16,    -1,    18,    19,    20,    21,    22,    23,    24,    -1,
03983       -1,    -1,    -1,    -1,    30,    31,    32,    33,    34,    35,
03984       36,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,
03985       46,    -1,    -1,    49,    50,    51,    52,    53,    54,    55,
03986       56,    57,    58,    59,    60,    61,    62,    -1,    64,    65,
03987       66,    -1,    68,    69,    -1,    -1,    -1,    -1,    -1,    -1,
03988       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03989       -1,    -1,    88,    -1,    -1,    91,    92,    -1,    94,    95,
03990       -1,    97,    98,    -1,   100,   101,   102,   103,   104,   105,
03991      106,   107,   108,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03992       -1,    -1,     3,     4,     5,    -1,     7,    -1,    -1,    -1,
03993       11,    12,   128,   129,   130,    16,    -1,    18,    19,    20,
03994       21,    22,    23,    24,    -1,    -1,    -1,    -1,    -1,    30,
03995       31,    32,    33,    34,    35,    36,    -1,    -1,    39,    -1,
03996       -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,    49,    50,
03997       51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
03998       61,    62,    -1,    64,    65,    66,    -1,    68,    69,    -1,
03999       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04000       -1,    -1,    -1,    -1,    -1,    -1,    -1,    88,    -1,    -1,
04001       91,    92,    -1,    94,    95,    -1,    -1,    98,    -1,   100,
04002      101,   102,   103,   104,   105,   106,   107,   108,    -1,    -1,
04003       -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,
04004       -1,     7,    -1,    -1,    -1,    11,    12,   128,   129,   130,
04005       16,    -1,    18,    19,    20,    21,    22,    23,    24,    -1,
04006       -1,    -1,    -1,    -1,    30,    31,    32,    33,    34,    35,
04007       36,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,
04008       46,    -1,    -1,    49,    50,    51,    52,    53,    54,    55,
04009       56,    57,    -1,    59,    60,    61,    62,    -1,    64,    65,
04010       66,    -1,    68,    69,    -1,    -1,    -1,    -1,    -1,    -1,
04011       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04012       -1,    -1,    88,    -1,    -1,    91,    92,    -1,    94,    95,
04013       -1,    97,    -1,    -1,   100,   101,   102,   103,   104,   105,
04014      106,   107,   108,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04015       -1,    -1,     3,     4,     5,    -1,     7,    -1,    -1,    -1,
04016       11,    12,   128,   129,   130,    16,    -1,    18,    19,    20,
04017       21,    22,    23,    24,    -1,    -1,    -1,    -1,    -1,    30,
04018       31,    32,    33,    34,    35,    36,    -1,    -1,    39,    -1,
04019       -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,    49,    50,
04020       51,    52,    53,    54,    55,    56,    57,    -1,    59,    60,
04021       61,    62,    -1,    64,    65,    66,    -1,    68,    69,    -1,
04022       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04023       -1,    -1,    -1,    -1,    -1,    -1,    -1,    88,    -1,    -1,
04024       91,    92,    -1,    94,    95,    -1,    97,    -1,    -1,   100,
04025      101,   102,   103,   104,   105,   106,   107,   108,    -1,    -1,
04026       -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,
04027       -1,     7,    -1,    -1,    -1,    11,    12,   128,   129,   130,
04028       16,    -1,    18,    19,    20,    21,    22,    23,    24,    -1,
04029       -1,    -1,    -1,    -1,    30,    31,    32,    33,    34,    35,
04030       36,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,
04031       46,    -1,    -1,    49,    50,    51,    52,    53,    54,    55,
04032       56,    57,    -1,    59,    60,    61,    62,    -1,    64,    65,
04033       66,    -1,    68,    69,    -1,    -1,    -1,    -1,    -1,    -1,
04034       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04035       -1,    -1,    88,    -1,    -1,    91,    92,    -1,    94,    95,
04036       -1,    97,    -1,    -1,   100,   101,   102,   103,   104,   105,
04037      106,   107,   108,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04038       -1,    -1,     3,     4,     5,    -1,     7,    -1,    -1,    -1,
04039       11,    12,   128,   129,   130,    16,    -1,    18,    19,    20,
04040       21,    22,    23,    24,    -1,    -1,    -1,    -1,    -1,    30,
04041       31,    32,    33,    34,    35,    36,    -1,    -1,    39,    -1,
04042       -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,    49,    50,
04043       51,    52,    53,    54,    55,    56,    57,    -1,    59,    60,
04044       61,    62,    -1,    64,    65,    66,    -1,    68,    69,    -1,
04045       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04046       -1,    -1,    -1,    -1,    -1,    -1,    -1,    88,    -1,    -1,
04047       91,    92,    -1,    94,    95,    -1,    97,    -1,    -1,   100,
04048      101,   102,   103,   104,   105,   106,   107,   108,    -1,    -1,
04049       -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,
04050       -1,     7,    -1,    -1,    -1,    11,    12,   128,   129,   130,
04051       16,    -1,    18,    19,    20,    21,    22,    23,    24,    -1,
04052       -1,    -1,    -1,    -1,    30,    31,    32,    33,    34,    35,
04053       36,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,
04054       46,    -1,    -1,    49,    50,    51,    52,    53,    54,    55,
04055       56,    57,    -1,    59,    60,    61,    62,    -1,    64,    65,
04056       66,    -1,    68,    69,    -1,    -1,    -1,    -1,    -1,    -1,
04057       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04058       -1,    -1,    88,    -1,    -1,    91,    92,    -1,    94,    95,
04059       -1,    97,    -1,    -1,   100,   101,   102,   103,   104,   105,
04060      106,   107,   108,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04061       -1,    -1,     3,     4,     5,    -1,     7,    -1,    -1,    -1,
04062       11,    12,   128,   129,   130,    16,    -1,    18,    19,    20,
04063       21,    22,    23,    24,    -1,    -1,    -1,    -1,    -1,    30,
04064       31,    32,    33,    34,    35,    36,    -1,    -1,    39,    -1,
04065       -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,    49,    50,
04066       51,    52,    53,    54,    55,    56,    57,    -1,    59,    60,
04067       61,    62,    -1,    64,    65,    66,    -1,    68,    69,    -1,
04068       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04069       -1,    -1,    -1,    -1,    -1,    -1,    -1,    88,    -1,    -1,
04070       91,    92,    -1,    94,    95,    -1,    -1,    -1,    -1,   100,
04071      101,   102,   103,   104,   105,   106,   107,   108,    -1,    -1,
04072       -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,
04073       -1,     7,    -1,    -1,    -1,    11,    12,   128,   129,   130,
04074       16,    -1,    18,    19,    20,    21,    22,    23,    24,    -1,
04075       -1,    -1,    -1,    -1,    30,    31,    32,    33,    34,    35,
04076       36,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,
04077       46,    -1,    -1,    49,    50,    51,    52,    53,    54,    55,
04078       56,    57,    -1,    59,    60,    61,    62,    -1,    64,    65,
04079       66,    -1,    68,    69,    -1,    -1,    -1,    -1,    -1,    -1,
04080       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04081       -1,    -1,    88,    -1,    -1,    91,    92,    -1,    94,    95,
04082       -1,    -1,    -1,    -1,   100,   101,   102,   103,   104,   105,
04083      106,   107,   108,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04084       -1,    -1,     3,     4,     5,    -1,     7,    -1,    -1,    -1,
04085       11,    12,   128,   129,   130,    16,    -1,    18,    19,    20,
04086       21,    22,    23,    24,    -1,    -1,    -1,    -1,    -1,    30,
04087       31,    32,    33,    34,    35,    36,    -1,    -1,    39,    -1,
04088       -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,    49,    50,
04089       51,    52,    53,    54,    55,    56,    57,    -1,    59,    60,
04090       61,    62,    -1,    64,    65,    66,    -1,    68,    69,    -1,
04091       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04092       -1,    -1,    -1,    -1,    -1,    -1,    -1,    88,    -1,    -1,
04093       91,    92,    -1,    94,    95,    -1,    -1,    -1,    -1,   100,
04094      101,   102,   103,   104,   105,   106,   107,   108,    -1,    -1,
04095       -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,
04096       -1,     7,    -1,    -1,    -1,    11,    12,   128,   129,   130,
04097       16,    -1,    18,    19,    20,    21,    22,    23,    24,    -1,
04098       -1,    -1,    -1,    -1,    30,    31,    32,    33,    34,    35,
04099       36,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,
04100       46,    -1,    -1,    49,    50,    51,    52,    53,    54,    55,
04101       56,    57,    -1,    59,    60,    61,    62,    -1,    64,    65,
04102       66,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04103       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04104       -1,    -1,    88,    -1,    -1,    91,    92,    -1,    94,    95,
04105       -1,    97,    -1,    -1,   100,   101,   102,   103,   104,   105,
04106      106,   107,   108,    -1,    -1,    -1,    -1,    -1,     3,     4,
04107        5,    -1,     7,    -1,    -1,    -1,    11,    12,    -1,    -1,
04108       -1,    16,   128,    18,    19,    20,    21,    22,    23,    24,
04109       -1,    -1,    -1,    -1,    -1,    30,    31,    32,    33,    34,
04110       35,    36,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,
04111       -1,    46,    -1,    -1,    49,    50,    51,    52,    53,    54,
04112       55,    56,    57,    -1,    59,    60,    61,    62,    -1,    64,
04113       65,    66,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04114       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04115       -1,    -1,    -1,    88,    -1,    -1,    91,    92,    -1,    94,
04116       95,    -1,    97,    -1,    -1,   100,   101,   102,   103,   104,
04117      105,   106,   107,   108,    -1,    -1,    -1,    -1,    -1,     3,
04118        4,     5,    -1,     7,    -1,    -1,    -1,    11,    12,    -1,
04119       -1,    -1,    16,   128,    18,    19,    20,    21,    22,    23,
04120       24,    -1,    -1,    -1,    -1,    -1,    30,    31,    32,    33,
04121       34,    35,    36,    -1,    -1,    39,    -1,    -1,    -1,    -1,
04122       -1,    -1,    46,    -1,    -1,    49,    50,    51,    52,    53,
04123       54,    55,    56,    57,    -1,    59,    60,    61,    62,    -1,
04124       64,    65,    66,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04125       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04126       -1,    85,    -1,    -1,    88,    -1,    -1,    91,    92,    -1,
04127       94,    95,    -1,    -1,    -1,    -1,   100,   101,   102,   103,
04128      104,   105,   106,   107,   108,    -1,    -1,    -1,    -1,    -1,
04129        3,     4,     5,    -1,     7,    -1,    -1,    -1,    11,    12,
04130       -1,    -1,    -1,    16,   128,    18,    19,    20,    21,    22,
04131       23,    24,    -1,    -1,    -1,    -1,    -1,    30,    31,    32,
04132       33,    34,    35,    36,    -1,    -1,    39,    -1,    -1,    -1,
04133       -1,    -1,    -1,    46,    -1,    -1,    49,    50,    51,    52,
04134       53,    54,    55,    56,    57,    -1,    59,    60,    61,    62,
04135       -1,    64,    65,    66,    -1,    -1,    -1,    -1,    -1,    -1,
04136       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04137       -1,    -1,    -1,    -1,    -1,    88,    -1,    -1,    91,    92,
04138       -1,    94,    95,    -1,    -1,    -1,    -1,   100,   101,   102,
04139      103,   104,   105,   106,   107,   108,    -1,    -1,    -1,    -1,
04140       -1,     3,     4,     5,    -1,     7,    -1,    -1,    -1,    11,
04141       12,    -1,    -1,    -1,    16,   128,    18,    19,    20,    21,
04142       22,    23,    24,    -1,    -1,    -1,    -1,    -1,    30,    31,
04143       32,    33,    34,    35,    36,    -1,    -1,    39,    -1,    -1,
04144       -1,    -1,    -1,    -1,    46,    -1,    -1,    49,    50,    51,
04145       52,    53,    54,    55,    56,    57,    -1,    59,    60,    61,
04146       62,    -1,    64,    65,    66,    -1,    -1,    -1,    -1,    -1,
04147       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04148       -1,    -1,    -1,    -1,    -1,    -1,    88,    -1,    -1,    91,
04149       92,    -1,    94,    95,    -1,    -1,    -1,    -1,   100,   101,
04150      102,   103,   104,   105,   106,   107,   108,    -1,    -1,    -1,
04151       -1,    -1,     3,     4,     5,    -1,     7,    -1,    -1,    -1,
04152       11,    12,    -1,    -1,    -1,    16,   128,    18,    19,    20,
04153       21,    22,    23,    24,    -1,    -1,    -1,    -1,    -1,    30,
04154       31,    32,    33,    34,    35,    36,    -1,    -1,    39,    -1,
04155       -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,    49,    50,
04156       51,    52,    53,    54,    55,    56,    57,    -1,    59,    60,
04157       61,    62,    -1,    64,    65,    66,    -1,    -1,    -1,    -1,
04158       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04159       -1,    -1,    -1,    -1,    -1,    -1,    -1,    88,    -1,    -1,
04160       91,    92,    -1,    94,    95,    -1,    -1,    -1,    -1,   100,
04161      101,   102,   103,   104,   105,   106,   107,   108,    -1,    -1,
04162       -1,    -1,    -1,     3,     4,     5,    -1,     7,    -1,    -1,
04163       -1,    11,    12,    -1,    -1,    -1,    16,   128,    18,    19,
04164       20,    21,    22,    23,    24,    -1,    -1,    -1,    -1,    -1,
04165       30,    31,    32,    33,    34,    35,    36,    -1,    -1,    39,
04166       -1,    -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,    49,
04167       50,    51,    52,    53,    54,    55,    56,    57,    -1,    59,
04168       60,    61,    62,    -1,    64,    65,    66,    -1,    -1,    -1,
04169       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04170       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    88,    -1,
04171       -1,    91,    92,    -1,    94,    95,    -1,    -1,    -1,    -1,
04172      100,   101,   102,   103,   104,   105,   106,   107,   108,    -1,
04173       -1,    -1,    -1,    52,    53,    -1,    -1,    56,    -1,    -1,
04174       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   128,    68,
04175       69,    70,    71,    72,    73,    74,    75,    76,    -1,    -1,
04176       79,    80,    -1,    -1,    83,    84,    85,    86,    -1,    -1,
04177       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    97,    98,
04178       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04179       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   118,
04180      119,   120,   121,   122,   123,   124,   125,   126,   127,    -1,
04181      129,   130,    52,    53,    -1,    -1,    56,    -1,   137,    -1,
04182       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    68,    69,
04183       70,    71,    72,    73,    74,    75,    76,    -1,    -1,    79,
04184       80,    -1,    -1,    83,    84,    85,    86,    -1,    -1,    -1,
04185       -1,    -1,    -1,    -1,    -1,    -1,    -1,    97,    98,    -1,
04186       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04187       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   118,   119,
04188      120,   121,   122,   123,   124,   125,   126,   127,    -1,   129,
04189      130,    52,    53,    -1,    -1,    56,    -1,   137,    -1,    -1,
04190       -1,    -1,    -1,    -1,    -1,    -1,    -1,    68,    69,    70,
04191       71,    72,    73,    74,    75,    76,    -1,    -1,    79,    80,
04192       -1,    -1,    83,    84,    85,    86,    -1,    -1,    -1,    -1,
04193       -1,    -1,    -1,    -1,    -1,    -1,    97,    98,    -1,    -1,
04194       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04195       -1,    -1,    -1,    -1,    -1,    -1,    -1,   118,   119,   120,
04196      121,   122,   123,   124,   125,   126,   127,    -1,   129,   130,
04197       52,    53,    -1,    -1,    56,    -1,   137,    -1,    -1,    -1,
04198       -1,    -1,    -1,    -1,    -1,    -1,    68,    69,    70,    71,
04199       72,    73,    74,    75,    76,    -1,    -1,    79,    80,    -1,
04200       -1,    83,    84,    85,    86,    -1,    -1,    -1,    -1,    -1,
04201       -1,    -1,    -1,    -1,    -1,    97,    98,    -1,    -1,    -1,
04202       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04203       -1,    -1,    -1,    -1,    -1,    -1,   118,   119,   120,   121,
04204      122,   123,   124,   125,   126,   127,    -1,   129,   130,    52,
04205       53,    -1,    -1,    56,    -1,   137,    -1,    -1,    -1,    -1,
04206       -1,    -1,    -1,    -1,    -1,    68,    69,    70,    71,    72,
04207       73,    74,    75,    76,    -1,    -1,    79,    80,    -1,    -1,
04208       83,    84,    85,    86,    -1,    -1,    -1,    -1,    -1,    -1,
04209       -1,    -1,    -1,    -1,    97,    98,    -1,    -1,    -1,    -1,
04210       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04211       -1,    -1,    -1,    -1,    -1,   118,   119,   120,   121,   122,
04212      123,   124,   125,   126,   127,    -1,   129,   130,    52,    53,
04213       -1,    -1,    56,    -1,   137,    -1,    -1,    -1,    -1,    -1,
04214       -1,    -1,    -1,    -1,    68,    69,    70,    71,    72,    73,
04215       74,    75,    76,    -1,    -1,    79,    80,    -1,    -1,    83,
04216       84,    85,    86,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04217       -1,    -1,    -1,    97,    98,    -1,    -1,    -1,    -1,    -1,
04218       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04219       -1,    -1,    -1,    -1,   118,   119,   120,   121,   122,   123,
04220      124,   125,   126,   127,    -1,   129,   130,    52,    53,    -1,
04221       -1,    56,    -1,   137,    -1,    -1,    -1,    -1,    -1,    -1,
04222       -1,    -1,    -1,    68,    69,    70,    71,    72,    73,    74,
04223       75,    76,    -1,    -1,    79,    80,    -1,    -1,    83,    84,
04224       85,    86,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04225       -1,    -1,    97,    98,    -1,    -1,    -1,    -1,    -1,    -1,
04226       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04227       -1,    -1,    -1,   118,   119,   120,   121,   122,   123,   124,
04228      125,   126,   127,    -1,   129,   130,    52,    53,    -1,    -1,
04229       56,    -1,   137,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04230       -1,    -1,    68,    69,    70,    71,    72,    73,    74,    75,
04231       76,    -1,    -1,    79,    80,    -1,    -1,    83,    84,    85,
04232       86,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04233       -1,    97,    98,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04234       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04235       -1,    -1,   118,   119,   120,   121,   122,   123,   124,   125,
04236      126,   127,    -1,   129,   130,    52,    53,    -1,    -1,    56,
04237       -1,   137,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04238       -1,    68,    69,    70,    71,    72,    73,    74,    75,    76,
04239       -1,    -1,    79,    80,    -1,    -1,    83,    84,    85,    86,
04240       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04241       97,    98,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04242       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04243       -1,   118,   119,   120,   121,   122,   123,   124,   125,   126,
04244      127,    -1,   129,   130,    52,    53,    -1,    -1,    56,    -1,
04245      137,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04246       68,    69,    70,    71,    72,    73,    74,    75,    76,    -1,
04247       -1,    79,    80,    -1,    -1,    83,    84,    85,    86,    -1,
04248       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    97,
04249       98,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04250       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04251      118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
04252       -1,   129,   130,    52,    53,    -1,    -1,    56,    -1,   137,
04253       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    68,
04254       69,    70,    71,    72,    73,    74,    75,    76,    -1,    -1,
04255       79,    80,    -1,    -1,    83,    84,    85,    86,    -1,    -1,
04256       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    97,    98,
04257       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04258       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   118,
04259      119,   120,   121,   122,   123,   124,   125,   126,   127,    -1,
04260      129,   130,    52,    53,    -1,    -1,    56,    -1,   137,    -1,
04261       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    68,    69,
04262       70,    71,    72,    73,    74,    75,    76,    -1,    -1,    79,
04263       80,    -1,    -1,    83,    84,    85,    86,    -1,    -1,    -1,
04264       -1,    -1,    -1,    -1,    -1,    -1,    -1,    97,    98,    -1,
04265       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04266       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   118,   119,
04267      120,   121,   122,   123,   124,   125,   126,   127,    -1,   129,
04268      130,    52,    53,    -1,    -1,    56,    -1,   137,    -1,    -1,
04269       -1,    -1,    -1,    -1,    -1,    -1,    -1,    68,    69,    70,
04270       71,    72,    73,    74,    75,    76,    -1,    -1,    79,    80,
04271       -1,    -1,    83,    84,    85,    86,    -1,    -1,    -1,    -1,
04272       -1,    -1,    -1,    -1,    -1,    -1,    97,    98,    70,    71,
04273       72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
04274       82,    -1,    -1,    85,    86,    -1,    -1,   118,   119,   120,
04275      121,   122,   123,   124,   125,   126,   127,    -1,   129,   130,
04276       -1,    -1,    -1,    -1,    -1,    -1,   137,    -1,    -1,    -1,
04277       -1,    -1,    -1,    -1,   116,    -1,   118,   119,   120,   121,
04278      122,   123,   124,   125,   126,   127,    -1,    -1,    -1,    -1,
04279       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04280       -1,   143
04281 };
04282 
04283 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
04284    symbol of state STATE-NUM.  */
04285 static const yytype_uint16 yystos[] =
04286 {
04287        0,   145,   146,     0,     1,     3,     4,     5,     6,     7,
04288       11,    12,    16,    18,    19,    20,    21,    22,    23,    24,
04289       30,    31,    32,    33,    34,    35,    36,    39,    45,    46,
04290       47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
04291       57,    59,    60,    61,    62,    64,    65,    66,    68,    69,
04292       88,    91,    92,    94,    95,    97,   100,   101,   102,   103,
04293      104,   105,   106,   107,   108,   128,   129,   130,   147,   148,
04294      149,   156,   158,   159,   161,   162,   165,   166,   167,   169,
04295      170,   171,   173,   174,   184,   199,   218,   219,   220,   221,
04296      222,   223,   224,   225,   226,   227,   228,   254,   255,   269,
04297      270,   271,   272,   273,   274,   275,   278,   280,   281,   293,
04298      295,   296,   297,   298,   299,   300,   301,   302,   335,   346,
04299      149,     3,     4,     5,     6,     7,     8,     9,    10,    11,
04300       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
04301       22,    23,    24,    25,    26,    30,    31,    32,    33,    34,
04302       35,    36,    37,    38,    39,    45,    46,    47,    48,    49,
04303       50,    51,    52,    53,    56,    68,    69,    70,    71,    72,
04304       73,    74,    75,    76,    79,    80,    83,    84,    85,    86,
04305       97,    98,   118,   119,   120,   121,   122,   123,   124,   125,
04306      126,   127,   129,   130,   137,   177,   178,   179,   180,   182,
04307      183,   293,   295,    39,    58,    88,    91,    97,    98,    99,
04308      129,   166,   174,   184,   186,   191,   194,   196,   218,   298,
04309      299,   301,   302,   333,   334,   191,   191,   138,   192,   193,
04310      138,   188,   192,   138,   143,   340,    54,   179,   340,   150,
04311      132,    21,    22,    30,    31,    32,   165,   184,   218,   184,
04312       56,     1,    47,    91,   152,   153,   154,   156,   168,   169,
04313      346,   201,   202,   187,   196,   333,   346,   186,   332,   333,
04314      346,    46,    88,   128,   136,   173,   199,   218,   298,   299,
04315      302,   246,   247,    54,    55,    57,   177,   285,   294,   284,
04316      285,   286,   142,   276,   142,   282,   142,   279,   142,   283,
04317      297,   161,   184,   184,   141,   143,   339,   344,   345,    40,
04318       41,    42,    43,    44,    37,    38,    26,   132,   188,   192,
04319      260,    28,   252,   115,   136,    91,    97,   170,   115,    70,
04320       71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
04321       81,    82,    85,    86,   116,   118,   119,   120,   121,   122,
04322      123,   124,   125,   126,   127,    87,   134,   135,   200,   159,
04323      160,   160,   205,   207,   160,   339,   345,    88,   167,   174,
04324      218,   234,   298,   299,   302,    52,    56,    85,    88,   175,
04325      176,   218,   298,   299,   302,   176,    33,    34,    35,    36,
04326       49,    50,    51,    52,    56,   138,   177,   300,   330,    87,
04327      135,   338,   260,   272,    89,    89,   136,   186,    56,   186,
04328      186,   186,   115,    90,   136,   195,   346,    87,   134,   135,
04329       89,    89,   136,   195,   191,   340,   341,   191,   190,   191,
04330      196,   333,   346,   159,   341,   159,    54,    65,    66,   157,
04331      138,   185,   132,   152,    87,   135,    89,   156,   155,   168,
04332      139,   339,   345,   341,   341,   159,   140,   136,   143,   343,
04333      136,   343,   133,   343,   340,    56,   297,   170,   172,   136,
04334       87,   134,   135,   248,    63,   109,   111,   112,   287,   112,
04335      287,   112,    67,   287,   112,   112,   277,   287,   112,    63,
04336      112,   112,   112,   277,   112,    63,   112,    70,   141,   149,
04337      160,   160,   160,   160,   156,   159,   159,   262,   261,    96,
04338      163,   253,    97,   161,   186,   196,   197,   198,   168,   136,
04339      173,   136,   158,   161,   174,   184,   186,   198,   184,   184,
04340      184,   184,   184,   184,   184,   184,   184,   184,   184,   184,
04341      184,   184,   184,   184,   184,   184,   184,   184,   184,   184,
04342      184,   184,   184,   184,    52,    53,    56,   182,   259,   336,
04343      337,   190,    52,    53,    56,   182,   258,   336,   151,   152,
04344       13,   230,   344,   230,   160,   160,   339,    17,   263,    56,
04345       87,   134,   135,    25,   159,    52,    56,   175,     1,   119,
04346      303,   344,    87,   134,   135,   214,   331,   215,   338,    52,
04347       56,   336,   161,   184,   161,   184,   181,   184,   186,    97,
04348      186,   194,   333,    52,    56,   190,    52,    56,   334,   341,
04349      139,   341,   136,   136,   341,   179,   204,   184,   147,   133,
04350      336,   336,   184,   132,   341,   154,   203,   333,   136,   172,
04351       52,    56,   190,    52,    56,    52,    54,    55,    56,    57,
04352       58,    70,    91,    97,    98,    99,   122,   125,   138,   250,
04353      307,   309,   310,   311,   312,   313,   314,   315,   318,   319,
04354      320,   321,   324,   325,   326,   327,   328,   289,   288,   142,
04355      287,   142,   142,   142,   184,    78,   120,   241,   242,   346,
04356      241,   164,   241,   186,   136,   341,   172,   136,   115,    44,
04357      340,    89,    89,   188,   192,   257,   340,   342,    89,    89,
04358      188,   192,   256,    10,   229,     8,   265,   346,   152,    13,
04359      152,    27,   231,   344,   231,   263,   196,   229,    52,    56,
04360      190,    52,    56,   209,   212,   344,   304,   211,    52,    56,
04361      175,   190,   151,   159,   138,   305,   306,   216,   188,   189,
04362      192,   346,    44,   179,   186,   195,    89,    89,   342,    89,
04363       89,   333,   159,   133,   147,   341,   343,   170,   342,    91,
04364       97,   235,   236,   237,   311,   309,   249,   115,   136,   308,
04365      186,   136,   329,   346,    52,   136,   329,   136,   308,    52,
04366      136,   308,    52,   290,    54,    55,    57,   292,   302,   238,
04367      240,   243,   311,   313,   314,   316,   317,   320,   322,   323,
04368      326,   328,   340,   152,   152,   241,   152,    97,   186,   172,
04369      184,   117,   161,   184,   161,   184,   163,   188,   140,    89,
04370      161,   184,   161,   184,   163,   189,   186,   198,   266,   346,
04371       15,   233,   346,    14,   232,   233,   233,   206,   208,   229,
04372      136,   230,   342,   160,   344,   160,   151,   342,   229,   341,
04373      309,   151,   309,   177,   260,   252,   184,    89,   136,   341,
04374      133,   237,   136,   311,   136,   341,   243,    29,   113,   251,
04375      186,   307,   312,   324,   326,   315,   320,   328,   313,   321,
04376      326,   311,   313,   291,   243,   120,   115,   136,   239,    88,
04377      218,   136,   329,   329,   136,   239,   136,   239,   141,    10,
04378      133,   152,    10,   186,   184,   161,   184,    90,   267,   346,
04379      152,     9,   268,   346,   160,   229,   229,   152,   152,   186,
04380      152,   231,   213,   344,   229,   341,   229,   344,   217,   341,
04381      236,   136,    97,   235,   139,   152,   152,   136,   308,   136,
04382      308,   329,   136,   308,   136,   308,   308,   152,   120,   218,
04383      238,   323,   326,    56,    87,   316,   320,   313,   322,   326,
04384      313,    52,   244,   245,   310,   133,    88,   174,   218,   298,
04385      299,   302,   230,   152,   230,   229,   229,   233,   263,   264,
04386      210,   151,   305,   136,   236,   136,   311,    10,   133,   313,
04387      326,   313,   313,   110,   136,   239,   136,   239,    52,    56,
04388      329,   136,   239,   136,   239,   239,   136,   340,    56,    87,
04389      134,   135,   152,   152,   152,   229,   151,   236,   136,   308,
04390      136,   308,   308,   308,   313,   326,   313,   313,   245,    52,
04391       56,   190,    52,    56,   265,   232,   229,   229,   236,   313,
04392      239,   136,   239,   239,   239,   342,   308,   313,   239
04393 };
04394 
04395 #define yyerrok         (yyerrstatus = 0)
04396 #define yyclearin       (yychar = YYEMPTY)
04397 #define YYEMPTY         (-2)
04398 #define YYEOF           0
04399 
04400 #define YYACCEPT        goto yyacceptlab
04401 #define YYABORT         goto yyabortlab
04402 #define YYERROR         goto yyerrorlab
04403 
04404 
04405 /* Like YYERROR except do call yyerror.  This remains here temporarily
04406    to ease the transition to the new meaning of YYERROR, for GCC.
04407    Once GCC version 2 has supplanted version 1, this can go.  However,
04408    YYFAIL appears to be in use.  Nevertheless, it is formally deprecated
04409    in Bison 2.4.2's NEWS entry, where a plan to phase it out is
04410    discussed.  */
04411 
04412 #define YYFAIL          goto yyerrlab
04413 #if defined YYFAIL
04414   /* This is here to suppress warnings from the GCC cpp's
04415      -Wunused-macros.  Normally we don't worry about that warning, but
04416      some users do, and we want to make it easy for users to remove
04417      YYFAIL uses, which will produce warnings from Bison 2.5.  */
04418 #endif
04419 
04420 #define YYRECOVERING()  (!!yyerrstatus)
04421 
04422 #define YYBACKUP(Token, Value)                                  \
04423 do                                                              \
04424   if (yychar == YYEMPTY && yylen == 1)                          \
04425     {                                                           \
04426       yychar = (Token);                                         \
04427       yylval = (Value);                                         \
04428       YYPOPSTACK (1);                                           \
04429       goto yybackup;                                            \
04430     }                                                           \
04431   else                                                          \
04432     {                                                           \
04433       parser_yyerror (parser, YY_("syntax error: cannot back up")); \
04434       YYERROR;                                                  \
04435     }                                                           \
04436 while (YYID (0))
04437 
04438 
04439 #define YYTERROR        1
04440 #define YYERRCODE       256
04441 
04442 
04443 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
04444    If N is 0, then set CURRENT to the empty location which ends
04445    the previous symbol: RHS[0] (always defined).  */
04446 
04447 #define YYRHSLOC(Rhs, K) ((Rhs)[K])
04448 #ifndef YYLLOC_DEFAULT
04449 # define YYLLOC_DEFAULT(Current, Rhs, N)                                \
04450     do                                                                  \
04451       if (YYID (N))                                                    \
04452         {                                                               \
04453           (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;        \
04454           (Current).first_column = YYRHSLOC (Rhs, 1).first_column;      \
04455           (Current).last_line    = YYRHSLOC (Rhs, N).last_line;         \
04456           (Current).last_column  = YYRHSLOC (Rhs, N).last_column;       \
04457         }                                                               \
04458       else                                                              \
04459         {                                                               \
04460           (Current).first_line   = (Current).last_line   =              \
04461             YYRHSLOC (Rhs, 0).last_line;                                \
04462           (Current).first_column = (Current).last_column =              \
04463             YYRHSLOC (Rhs, 0).last_column;                              \
04464         }                                                               \
04465     while (YYID (0))
04466 #endif
04467 
04468 
04469 /* This macro is provided for backward compatibility. */
04470 
04471 #ifndef YY_LOCATION_PRINT
04472 # define YY_LOCATION_PRINT(File, Loc) ((void) 0)
04473 #endif
04474 
04475 
04476 /* YYLEX -- calling `yylex' with the right arguments.  */
04477 
04478 #ifdef YYLEX_PARAM
04479 # define YYLEX yylex (&yylval, YYLEX_PARAM)
04480 #else
04481 # define YYLEX yylex (&yylval, parser)
04482 #endif
04483 
04484 /* Enable debugging if requested.  */
04485 #if YYDEBUG
04486 
04487 # ifndef YYFPRINTF
04488 #  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
04489 #  define YYFPRINTF fprintf
04490 # endif
04491 
04492 # define YYDPRINTF(Args)                        \
04493 do {                                            \
04494   if (yydebug)                                  \
04495     YYFPRINTF Args;                             \
04496 } while (YYID (0))
04497 
04498 # define YY_SYMBOL_PRINT(Title, Type, Value, Location)                    \
04499 do {                                                                      \
04500   if (yydebug)                                                            \
04501     {                                                                     \
04502       YYFPRINTF (stderr, "%s ", Title);                                   \
04503       yy_symbol_print (stderr,                                            \
04504                   Type, Value, parser); \
04505       YYFPRINTF (stderr, "\n");                                           \
04506     }                                                                     \
04507 } while (YYID (0))
04508 
04509 
04510 /*--------------------------------.
04511 | Print this symbol on YYOUTPUT.  |
04512 `--------------------------------*/
04513 
04514 /*ARGSUSED*/
04515 #if (defined __STDC__ || defined __C99__FUNC__ \
04516      || defined __cplusplus || defined _MSC_VER)
04517 static void
04518 yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, struct parser_params *parser)
04519 #else
04520 static void
04521 yy_symbol_value_print (yyoutput, yytype, yyvaluep, parser)
04522     FILE *yyoutput;
04523     int yytype;
04524     YYSTYPE const * const yyvaluep;
04525     struct parser_params *parser;
04526 #endif
04527 {
04528   if (!yyvaluep)
04529     return;
04530   YYUSE (parser);
04531 # ifdef YYPRINT
04532   if (yytype < YYNTOKENS)
04533     YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
04534 # else
04535   YYUSE (yyoutput);
04536 # endif
04537   switch (yytype)
04538     {
04539       default:
04540         break;
04541     }
04542 }
04543 
04544 
04545 /*--------------------------------.
04546 | Print this symbol on YYOUTPUT.  |
04547 `--------------------------------*/
04548 
04549 #if (defined __STDC__ || defined __C99__FUNC__ \
04550      || defined __cplusplus || defined _MSC_VER)
04551 static void
04552 yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, struct parser_params *parser)
04553 #else
04554 static void
04555 yy_symbol_print (yyoutput, yytype, yyvaluep, parser)
04556     FILE *yyoutput;
04557     int yytype;
04558     YYSTYPE const * const yyvaluep;
04559     struct parser_params *parser;
04560 #endif
04561 {
04562   if (yytype < YYNTOKENS)
04563     YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
04564   else
04565     YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
04566 
04567   yy_symbol_value_print (yyoutput, yytype, yyvaluep, parser);
04568   YYFPRINTF (yyoutput, ")");
04569 }
04570 
04571 /*------------------------------------------------------------------.
04572 | yy_stack_print -- Print the state stack from its BOTTOM up to its |
04573 | TOP (included).                                                   |
04574 `------------------------------------------------------------------*/
04575 
04576 #if (defined __STDC__ || defined __C99__FUNC__ \
04577      || defined __cplusplus || defined _MSC_VER)
04578 static void
04579 yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
04580 #else
04581 static void
04582 yy_stack_print (yybottom, yytop)
04583     yytype_int16 *yybottom;
04584     yytype_int16 *yytop;
04585 #endif
04586 {
04587   YYFPRINTF (stderr, "Stack now");
04588   for (; yybottom <= yytop; yybottom++)
04589     {
04590       int yybot = *yybottom;
04591       YYFPRINTF (stderr, " %d", yybot);
04592     }
04593   YYFPRINTF (stderr, "\n");
04594 }
04595 
04596 # define YY_STACK_PRINT(Bottom, Top)                            \
04597 do {                                                            \
04598   if (yydebug)                                                  \
04599     yy_stack_print ((Bottom), (Top));                           \
04600 } while (YYID (0))
04601 
04602 
04603 /*------------------------------------------------.
04604 | Report that the YYRULE is going to be reduced.  |
04605 `------------------------------------------------*/
04606 
04607 #if (defined __STDC__ || defined __C99__FUNC__ \
04608      || defined __cplusplus || defined _MSC_VER)
04609 static void
04610 yy_reduce_print (YYSTYPE *yyvsp, int yyrule, struct parser_params *parser)
04611 #else
04612 static void
04613 yy_reduce_print (yyvsp, yyrule, parser)
04614     YYSTYPE *yyvsp;
04615     int yyrule;
04616     struct parser_params *parser;
04617 #endif
04618 {
04619   int yynrhs = yyr2[yyrule];
04620   int yyi;
04621   unsigned long int yylno = yyrline[yyrule];
04622   YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
04623              yyrule - 1, yylno);
04624   /* The symbols being reduced.  */
04625   for (yyi = 0; yyi < yynrhs; yyi++)
04626     {
04627       YYFPRINTF (stderr, "   $%d = ", yyi + 1);
04628       yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
04629                        &(yyvsp[(yyi + 1) - (yynrhs)])
04630                                        , parser);
04631       YYFPRINTF (stderr, "\n");
04632     }
04633 }
04634 
04635 # define YY_REDUCE_PRINT(Rule)          \
04636 do {                                    \
04637   if (yydebug)                          \
04638     yy_reduce_print (yyvsp, Rule, parser); \
04639 } while (YYID (0))
04640 
04641 /* Nonzero means print parse trace.  It is left uninitialized so that
04642    multiple parsers can coexist.  */
04643 #ifndef yydebug
04644 int yydebug;
04645 #endif
04646 #else /* !YYDEBUG */
04647 # define YYDPRINTF(Args)
04648 # define YY_SYMBOL_PRINT(Title, Type, Value, Location)
04649 # define YY_STACK_PRINT(Bottom, Top)
04650 # define YY_REDUCE_PRINT(Rule)
04651 #endif /* !YYDEBUG */
04652 
04653 
04654 /* YYINITDEPTH -- initial size of the parser's stacks.  */
04655 #ifndef YYINITDEPTH
04656 # define YYINITDEPTH 200
04657 #endif
04658 
04659 /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
04660    if the built-in stack extension method is used).
04661 
04662    Do not make this value too large; the results are undefined if
04663    YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
04664    evaluated with infinite-precision integer arithmetic.  */
04665 
04666 #ifndef YYMAXDEPTH
04667 # define YYMAXDEPTH 10000
04668 #endif
04669 
04670 
04671 #if YYERROR_VERBOSE
04672 
04673 # ifndef yystrlen
04674 #  if defined __GLIBC__ && defined _STRING_H
04675 #   define yystrlen strlen
04676 #  else
04677 /* Return the length of YYSTR.  */
04678 #if (defined __STDC__ || defined __C99__FUNC__ \
04679      || defined __cplusplus || defined _MSC_VER)
04680 static YYSIZE_T
04681 yystrlen (const char *yystr)
04682 #else
04683 static YYSIZE_T
04684 yystrlen (yystr)
04685     const char *yystr;
04686 #endif
04687 {
04688   YYSIZE_T yylen;
04689   for (yylen = 0; yystr[yylen]; yylen++)
04690     continue;
04691   return yylen;
04692 }
04693 #  endif
04694 # endif
04695 
04696 # ifndef yystpcpy
04697 #  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
04698 #   define yystpcpy stpcpy
04699 #  else
04700 /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
04701    YYDEST.  */
04702 #if (defined __STDC__ || defined __C99__FUNC__ \
04703      || defined __cplusplus || defined _MSC_VER)
04704 static char *
04705 yystpcpy (char *yydest, const char *yysrc)
04706 #else
04707 static char *
04708 yystpcpy (yydest, yysrc)
04709     char *yydest;
04710     const char *yysrc;
04711 #endif
04712 {
04713   char *yyd = yydest;
04714   const char *yys = yysrc;
04715 
04716   while ((*yyd++ = *yys++) != '\0')
04717     continue;
04718 
04719   return yyd - 1;
04720 }
04721 #  endif
04722 # endif
04723 
04724 # ifndef yytnamerr
04725 /* Copy to YYRES the contents of YYSTR after stripping away unnecessary
04726    quotes and backslashes, so that it's suitable for yyerror.  The
04727    heuristic is that double-quoting is unnecessary unless the string
04728    contains an apostrophe, a comma, or backslash (other than
04729    backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
04730    null, do not copy; instead, return the length of what the result
04731    would have been.  */
04732 static YYSIZE_T
04733 yytnamerr (char *yyres, const char *yystr)
04734 {
04735   if (*yystr == '"')
04736     {
04737       YYSIZE_T yyn = 0;
04738       char const *yyp = yystr;
04739 
04740       for (;;)
04741         switch (*++yyp)
04742           {
04743           case '\'':
04744           case ',':
04745             goto do_not_strip_quotes;
04746 
04747           case '\\':
04748             if (*++yyp != '\\')
04749               goto do_not_strip_quotes;
04750             /* Fall through.  */
04751           default:
04752             if (yyres)
04753               yyres[yyn] = *yyp;
04754             yyn++;
04755             break;
04756 
04757           case '"':
04758             if (yyres)
04759               yyres[yyn] = '\0';
04760             return yyn;
04761           }
04762     do_not_strip_quotes: ;
04763     }
04764 
04765   if (! yyres)
04766     return yystrlen (yystr);
04767 
04768   return yystpcpy (yyres, yystr) - yyres;
04769 }
04770 # endif
04771 
04772 /* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message
04773    about the unexpected token YYTOKEN for the state stack whose top is
04774    YYSSP.
04775 
04776    Return 0 if *YYMSG was successfully written.  Return 1 if *YYMSG is
04777    not large enough to hold the message.  In that case, also set
04778    *YYMSG_ALLOC to the required number of bytes.  Return 2 if the
04779    required number of bytes is too large to store.  */
04780 static int
04781 yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
04782                 yytype_int16 *yyssp, int yytoken)
04783 {
04784   YYSIZE_T yysize0 = yytnamerr (0, yytname[yytoken]);
04785   YYSIZE_T yysize = yysize0;
04786   YYSIZE_T yysize1;
04787   enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
04788   /* Internationalized format string. */
04789   const char *yyformat = 0;
04790   /* Arguments of yyformat. */
04791   char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
04792   /* Number of reported tokens (one for the "unexpected", one per
04793      "expected"). */
04794   int yycount = 0;
04795 
04796   /* There are many possibilities here to consider:
04797      - Assume YYFAIL is not used.  It's too flawed to consider.  See
04798        <http://lists.gnu.org/archive/html/bison-patches/2009-12/msg00024.html>
04799        for details.  YYERROR is fine as it does not invoke this
04800        function.
04801      - If this state is a consistent state with a default action, then
04802        the only way this function was invoked is if the default action
04803        is an error action.  In that case, don't check for expected
04804        tokens because there are none.
04805      - The only way there can be no lookahead present (in yychar) is if
04806        this state is a consistent state with a default action.  Thus,
04807        detecting the absence of a lookahead is sufficient to determine
04808        that there is no unexpected or expected token to report.  In that
04809        case, just report a simple "syntax error".
04810      - Don't assume there isn't a lookahead just because this state is a
04811        consistent state with a default action.  There might have been a
04812        previous inconsistent state, consistent state with a non-default
04813        action, or user semantic action that manipulated yychar.
04814      - Of course, the expected token list depends on states to have
04815        correct lookahead information, and it depends on the parser not
04816        to perform extra reductions after fetching a lookahead from the
04817        scanner and before detecting a syntax error.  Thus, state merging
04818        (from LALR or IELR) and default reductions corrupt the expected
04819        token list.  However, the list is correct for canonical LR with
04820        one exception: it will still contain any token that will not be
04821        accepted due to an error action in a later state.
04822   */
04823   if (yytoken != YYEMPTY)
04824     {
04825       int yyn = yypact[*yyssp];
04826       yyarg[yycount++] = yytname[yytoken];
04827       if (!yypact_value_is_default (yyn))
04828         {
04829           /* Start YYX at -YYN if negative to avoid negative indexes in
04830              YYCHECK.  In other words, skip the first -YYN actions for
04831              this state because they are default actions.  */
04832           int yyxbegin = yyn < 0 ? -yyn : 0;
04833           /* Stay within bounds of both yycheck and yytname.  */
04834           int yychecklim = YYLAST - yyn + 1;
04835           int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
04836           int yyx;
04837 
04838           for (yyx = yyxbegin; yyx < yyxend; ++yyx)
04839             if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR
04840                 && !yytable_value_is_error (yytable[yyx + yyn]))
04841               {
04842                 if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
04843                   {
04844                     yycount = 1;
04845                     yysize = yysize0;
04846                     break;
04847                   }
04848                 yyarg[yycount++] = yytname[yyx];
04849                 yysize1 = yysize + yytnamerr (0, yytname[yyx]);
04850                 if (! (yysize <= yysize1
04851                        && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
04852                   return 2;
04853                 yysize = yysize1;
04854               }
04855         }
04856     }
04857 
04858   switch (yycount)
04859     {
04860 # define YYCASE_(N, S)                      \
04861       case N:                               \
04862         yyformat = S;                       \
04863       break
04864       YYCASE_(0, YY_("syntax error"));
04865       YYCASE_(1, YY_("syntax error, unexpected %s"));
04866       YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
04867       YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
04868       YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
04869       YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
04870 # undef YYCASE_
04871     }
04872 
04873   yysize1 = yysize + yystrlen (yyformat);
04874   if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
04875     return 2;
04876   yysize = yysize1;
04877 
04878   if (*yymsg_alloc < yysize)
04879     {
04880       *yymsg_alloc = 2 * yysize;
04881       if (! (yysize <= *yymsg_alloc
04882              && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
04883         *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
04884       return 1;
04885     }
04886 
04887   /* Avoid sprintf, as that infringes on the user's name space.
04888      Don't have undefined behavior even if the translation
04889      produced a string with the wrong number of "%s"s.  */
04890   {
04891     char *yyp = *yymsg;
04892     int yyi = 0;
04893     while ((*yyp = *yyformat) != '\0')
04894       if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
04895         {
04896           yyp += yytnamerr (yyp, yyarg[yyi++]);
04897           yyformat += 2;
04898         }
04899       else
04900         {
04901           yyp++;
04902           yyformat++;
04903         }
04904   }
04905   return 0;
04906 }
04907 #endif /* YYERROR_VERBOSE */
04908 
04909 /*-----------------------------------------------.
04910 | Release the memory associated to this symbol.  |
04911 `-----------------------------------------------*/
04912 
04913 /*ARGSUSED*/
04914 #if (defined __STDC__ || defined __C99__FUNC__ \
04915      || defined __cplusplus || defined _MSC_VER)
04916 static void
04917 yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, struct parser_params *parser)
04918 #else
04919 static void
04920 yydestruct (yymsg, yytype, yyvaluep, parser)
04921     const char *yymsg;
04922     int yytype;
04923     YYSTYPE *yyvaluep;
04924     struct parser_params *parser;
04925 #endif
04926 {
04927   YYUSE (yyvaluep);
04928   YYUSE (parser);
04929 
04930   if (!yymsg)
04931     yymsg = "Deleting";
04932   YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
04933 
04934   switch (yytype)
04935     {
04936 
04937       default:
04938         break;
04939     }
04940 }
04941 
04942 
04943 /* Prevent warnings from -Wmissing-prototypes.  */
04944 #ifdef YYPARSE_PARAM
04945 #if defined __STDC__ || defined __cplusplus
04946 int yyparse (void *YYPARSE_PARAM);
04947 #else
04948 int yyparse ();
04949 #endif
04950 #else /* ! YYPARSE_PARAM */
04951 #if defined __STDC__ || defined __cplusplus
04952 int yyparse (struct parser_params *parser);
04953 #else
04954 int yyparse ();
04955 #endif
04956 #endif /* ! YYPARSE_PARAM */
04957 
04958 
04959 /*----------.
04960 | yyparse.  |
04961 `----------*/
04962 
04963 #ifdef YYPARSE_PARAM
04964 #if (defined __STDC__ || defined __C99__FUNC__ \
04965      || defined __cplusplus || defined _MSC_VER)
04966 int
04967 yyparse (void *YYPARSE_PARAM)
04968 #else
04969 int
04970 yyparse (YYPARSE_PARAM)
04971     void *YYPARSE_PARAM;
04972 #endif
04973 #else /* ! YYPARSE_PARAM */
04974 #if (defined __STDC__ || defined __C99__FUNC__ \
04975      || defined __cplusplus || defined _MSC_VER)
04976 int
04977 yyparse (struct parser_params *parser)
04978 #else
04979 int
04980 yyparse (parser)
04981     struct parser_params *parser;
04982 #endif
04983 #endif
04984 {
04985 /* The lookahead symbol.  */
04986 int yychar;
04987 
04988 /* The semantic value of the lookahead symbol.  */
04989 YYSTYPE yylval;
04990 
04991     /* Number of syntax errors so far.  */
04992     int yynerrs;
04993 
04994     int yystate;
04995     /* Number of tokens to shift before error messages enabled.  */
04996     int yyerrstatus;
04997 
04998     /* The stacks and their tools:
04999        `yyss': related to states.
05000        `yyvs': related to semantic values.
05001 
05002        Refer to the stacks thru separate pointers, to allow yyoverflow
05003        to reallocate them elsewhere.  */
05004 
05005     /* The state stack.  */
05006     yytype_int16 yyssa[YYINITDEPTH];
05007     yytype_int16 *yyss;
05008     yytype_int16 *yyssp;
05009 
05010     /* The semantic value stack.  */
05011     YYSTYPE yyvsa[YYINITDEPTH];
05012     YYSTYPE *yyvs;
05013     YYSTYPE *yyvsp;
05014 
05015     YYSIZE_T yystacksize;
05016 
05017   int yyn;
05018   int yyresult;
05019   /* Lookahead token as an internal (translated) token number.  */
05020   int yytoken;
05021   /* The variables used to return semantic value and location from the
05022      action routines.  */
05023   YYSTYPE yyval;
05024 
05025 #if YYERROR_VERBOSE
05026   /* Buffer for error messages, and its allocated size.  */
05027   char yymsgbuf[128];
05028   char *yymsg = yymsgbuf;
05029   YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
05030 #endif
05031 
05032 #define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
05033 
05034   /* The number of symbols on the RHS of the reduced rule.
05035      Keep to zero when no symbol should be popped.  */
05036   int yylen = 0;
05037 
05038   yytoken = 0;
05039   yyss = yyssa;
05040   yyvs = yyvsa;
05041   yystacksize = YYINITDEPTH;
05042 
05043   YYDPRINTF ((stderr, "Starting parse\n"));
05044 
05045   yystate = 0;
05046   yyerrstatus = 0;
05047   yynerrs = 0;
05048   yychar = YYEMPTY; /* Cause a token to be read.  */
05049 
05050   /* Initialize stack pointers.
05051      Waste one element of value and location stack
05052      so that they stay on the same level as the state stack.
05053      The wasted elements are never initialized.  */
05054   yyssp = yyss;
05055   yyvsp = yyvs;
05056 
05057   goto yysetstate;
05058 
05059 /*------------------------------------------------------------.
05060 | yynewstate -- Push a new state, which is found in yystate.  |
05061 `------------------------------------------------------------*/
05062  yynewstate:
05063   /* In all cases, when you get here, the value and location stacks
05064      have just been pushed.  So pushing a state here evens the stacks.  */
05065   yyssp++;
05066 
05067  yysetstate:
05068   *yyssp = yystate;
05069 
05070   if (yyss + yystacksize - 1 <= yyssp)
05071     {
05072       /* Get the current used size of the three stacks, in elements.  */
05073       YYSIZE_T yysize = yyssp - yyss + 1;
05074 
05075 #ifdef yyoverflow
05076       {
05077         /* Give user a chance to reallocate the stack.  Use copies of
05078            these so that the &'s don't force the real ones into
05079            memory.  */
05080         YYSTYPE *yyvs1 = yyvs;
05081         yytype_int16 *yyss1 = yyss;
05082 
05083         /* Each stack pointer address is followed by the size of the
05084            data in use in that stack, in bytes.  This used to be a
05085            conditional around just the two extra args, but that might
05086            be undefined if yyoverflow is a macro.  */
05087         yyoverflow (YY_("memory exhausted"),
05088                     &yyss1, yysize * sizeof (*yyssp),
05089                     &yyvs1, yysize * sizeof (*yyvsp),
05090                     &yystacksize);
05091 
05092         yyss = yyss1;
05093         yyvs = yyvs1;
05094       }
05095 #else /* no yyoverflow */
05096 # ifndef YYSTACK_RELOCATE
05097       goto yyexhaustedlab;
05098 # else
05099       /* Extend the stack our own way.  */
05100       if (YYMAXDEPTH <= yystacksize)
05101         goto yyexhaustedlab;
05102       yystacksize *= 2;
05103       if (YYMAXDEPTH < yystacksize)
05104         yystacksize = YYMAXDEPTH;
05105 
05106       {
05107         yytype_int16 *yyss1 = yyss;
05108         union yyalloc *yyptr =
05109           (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
05110         if (! yyptr)
05111           goto yyexhaustedlab;
05112         YYSTACK_RELOCATE (yyss_alloc, yyss);
05113         YYSTACK_RELOCATE (yyvs_alloc, yyvs);
05114 #  undef YYSTACK_RELOCATE
05115         if (yyss1 != yyssa)
05116           YYSTACK_FREE (yyss1);
05117       }
05118 # endif
05119 #endif /* no yyoverflow */
05120 
05121       yyssp = yyss + yysize - 1;
05122       yyvsp = yyvs + yysize - 1;
05123 
05124       YYDPRINTF ((stderr, "Stack size increased to %lu\n",
05125                   (unsigned long int) yystacksize));
05126 
05127       if (yyss + yystacksize - 1 <= yyssp)
05128         YYABORT;
05129     }
05130 
05131   YYDPRINTF ((stderr, "Entering state %d\n", yystate));
05132 
05133   if (yystate == YYFINAL)
05134     YYACCEPT;
05135 
05136   goto yybackup;
05137 
05138 /*-----------.
05139 | yybackup.  |
05140 `-----------*/
05141 yybackup:
05142 
05143   /* Do appropriate processing given the current state.  Read a
05144      lookahead token if we need one and don't already have one.  */
05145 
05146   /* First try to decide what to do without reference to lookahead token.  */
05147   yyn = yypact[yystate];
05148   if (yypact_value_is_default (yyn))
05149     goto yydefault;
05150 
05151   /* Not known => get a lookahead token if don't already have one.  */
05152 
05153   /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
05154   if (yychar == YYEMPTY)
05155     {
05156       YYDPRINTF ((stderr, "Reading a token: "));
05157       yychar = YYLEX;
05158     }
05159 
05160   if (yychar <= YYEOF)
05161     {
05162       yychar = yytoken = YYEOF;
05163       YYDPRINTF ((stderr, "Now at end of input.\n"));
05164     }
05165   else
05166     {
05167       yytoken = YYTRANSLATE (yychar);
05168       YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
05169     }
05170 
05171   /* If the proper action on seeing token YYTOKEN is to reduce or to
05172      detect an error, take that action.  */
05173   yyn += yytoken;
05174   if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
05175     goto yydefault;
05176   yyn = yytable[yyn];
05177   if (yyn <= 0)
05178     {
05179       if (yytable_value_is_error (yyn))
05180         goto yyerrlab;
05181       yyn = -yyn;
05182       goto yyreduce;
05183     }
05184 
05185   /* Count tokens shifted since error; after three, turn off error
05186      status.  */
05187   if (yyerrstatus)
05188     yyerrstatus--;
05189 
05190   /* Shift the lookahead token.  */
05191   YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
05192 
05193   /* Discard the shifted token.  */
05194   yychar = YYEMPTY;
05195 
05196   yystate = yyn;
05197   *++yyvsp = yylval;
05198 
05199   goto yynewstate;
05200 
05201 
05202 /*-----------------------------------------------------------.
05203 | yydefault -- do the default action for the current state.  |
05204 `-----------------------------------------------------------*/
05205 yydefault:
05206   yyn = yydefact[yystate];
05207   if (yyn == 0)
05208     goto yyerrlab;
05209   goto yyreduce;
05210 
05211 
05212 /*-----------------------------.
05213 | yyreduce -- Do a reduction.  |
05214 `-----------------------------*/
05215 yyreduce:
05216   /* yyn is the number of a rule to reduce with.  */
05217   yylen = yyr2[yyn];
05218 
05219   /* If YYLEN is nonzero, implement the default value of the action:
05220      `$$ = $1'.
05221 
05222      Otherwise, the following line sets YYVAL to garbage.
05223      This behavior is undocumented and Bison
05224      users should not rely upon it.  Assigning to YYVAL
05225      unconditionally makes the parser a bit smaller, and it avoids a
05226      GCC warning that YYVAL may be used uninitialized.  */
05227   yyval = yyvsp[1-yylen];
05228 
05229 
05230   YY_REDUCE_PRINT (yyn);
05231   switch (yyn)
05232     {
05233         case 2:
05234 
05235 /* Line 1806 of yacc.c  */
05236 #line 863 "parse.y"
05237     {
05238                         lex_state = EXPR_BEG;
05239                     /*%%%*/
05240                         local_push(compile_for_eval || rb_parse_in_main());
05241                     /*%
05242                         local_push(0);
05243                     %*/
05244                     }
05245     break;
05246 
05247   case 3:
05248 
05249 /* Line 1806 of yacc.c  */
05250 #line 872 "parse.y"
05251     {
05252                     /*%%%*/
05253                         if ((yyvsp[(2) - (2)].node) && !compile_for_eval) {
05254                             /* last expression should not be void */
05255                             if (nd_type((yyvsp[(2) - (2)].node)) != NODE_BLOCK) void_expr((yyvsp[(2) - (2)].node));
05256                             else {
05257                                 NODE *node = (yyvsp[(2) - (2)].node);
05258                                 while (node->nd_next) {
05259                                     node = node->nd_next;
05260                                 }
05261                                 void_expr(node->nd_head);
05262                             }
05263                         }
05264                         ruby_eval_tree = NEW_SCOPE(0, block_append(ruby_eval_tree, (yyvsp[(2) - (2)].node)));
05265                     /*%
05266                         $$ = $2;
05267                         parser->result = dispatch1(program, $$);
05268                     %*/
05269                         local_pop();
05270                     }
05271     break;
05272 
05273   case 4:
05274 
05275 /* Line 1806 of yacc.c  */
05276 #line 895 "parse.y"
05277     {
05278                     /*%%%*/
05279                         void_stmts((yyvsp[(1) - (2)].node));
05280                         fixup_nodes(&deferred_nodes);
05281                     /*%
05282                     %*/
05283                         (yyval.node) = (yyvsp[(1) - (2)].node);
05284                     }
05285     break;
05286 
05287   case 5:
05288 
05289 /* Line 1806 of yacc.c  */
05290 #line 906 "parse.y"
05291     {
05292                     /*%%%*/
05293                         (yyval.node) = NEW_BEGIN(0);
05294                     /*%
05295                         $$ = dispatch2(stmts_add, dispatch0(stmts_new),
05296                                                   dispatch0(void_stmt));
05297                     %*/
05298                     }
05299     break;
05300 
05301   case 6:
05302 
05303 /* Line 1806 of yacc.c  */
05304 #line 915 "parse.y"
05305     {
05306                     /*%%%*/
05307                         (yyval.node) = newline_node((yyvsp[(1) - (1)].node));
05308                     /*%
05309                         $$ = dispatch2(stmts_add, dispatch0(stmts_new), $1);
05310                     %*/
05311                     }
05312     break;
05313 
05314   case 7:
05315 
05316 /* Line 1806 of yacc.c  */
05317 #line 923 "parse.y"
05318     {
05319                     /*%%%*/
05320                         (yyval.node) = block_append((yyvsp[(1) - (3)].node), newline_node((yyvsp[(3) - (3)].node)));
05321                     /*%
05322                         $$ = dispatch2(stmts_add, $1, $3);
05323                     %*/
05324                     }
05325     break;
05326 
05327   case 8:
05328 
05329 /* Line 1806 of yacc.c  */
05330 #line 931 "parse.y"
05331     {
05332                         (yyval.node) = remove_begin((yyvsp[(2) - (2)].node));
05333                     }
05334     break;
05335 
05336   case 10:
05337 
05338 /* Line 1806 of yacc.c  */
05339 #line 938 "parse.y"
05340     {
05341                     /*%%%*/
05342                         /* local_push(0); */
05343                     /*%
05344                     %*/
05345                     }
05346     break;
05347 
05348   case 11:
05349 
05350 /* Line 1806 of yacc.c  */
05351 #line 945 "parse.y"
05352     {
05353                     /*%%%*/
05354                         ruby_eval_tree_begin = block_append(ruby_eval_tree_begin,
05355                                                             (yyvsp[(4) - (5)].node));
05356                         /* NEW_PREEXE($4)); */
05357                         /* local_pop(); */
05358                         (yyval.node) = NEW_BEGIN(0);
05359                     /*%
05360                         $$ = dispatch1(BEGIN, $4);
05361                     %*/
05362                     }
05363     break;
05364 
05365   case 12:
05366 
05367 /* Line 1806 of yacc.c  */
05368 #line 962 "parse.y"
05369     {
05370                     /*%%%*/
05371                         (yyval.node) = (yyvsp[(1) - (4)].node);
05372                         if ((yyvsp[(2) - (4)].node)) {
05373                             (yyval.node) = NEW_RESCUE((yyvsp[(1) - (4)].node), (yyvsp[(2) - (4)].node), (yyvsp[(3) - (4)].node));
05374                         }
05375                         else if ((yyvsp[(3) - (4)].node)) {
05376                             rb_warn0("else without rescue is useless");
05377                             (yyval.node) = block_append((yyval.node), (yyvsp[(3) - (4)].node));
05378                         }
05379                         if ((yyvsp[(4) - (4)].node)) {
05380                             if ((yyval.node)) {
05381                                 (yyval.node) = NEW_ENSURE((yyval.node), (yyvsp[(4) - (4)].node));
05382                             }
05383                             else {
05384                                 (yyval.node) = block_append((yyvsp[(4) - (4)].node), NEW_NIL());
05385                             }
05386                         }
05387                         fixpos((yyval.node), (yyvsp[(1) - (4)].node));
05388                     /*%
05389                         $$ = dispatch4(bodystmt,
05390                                        escape_Qundef($1),
05391                                        escape_Qundef($2),
05392                                        escape_Qundef($3),
05393                                        escape_Qundef($4));
05394                     %*/
05395                     }
05396     break;
05397 
05398   case 13:
05399 
05400 /* Line 1806 of yacc.c  */
05401 #line 992 "parse.y"
05402     {
05403                     /*%%%*/
05404                         void_stmts((yyvsp[(1) - (2)].node));
05405                         fixup_nodes(&deferred_nodes);
05406                     /*%
05407                     %*/
05408                         (yyval.node) = (yyvsp[(1) - (2)].node);
05409                     }
05410     break;
05411 
05412   case 14:
05413 
05414 /* Line 1806 of yacc.c  */
05415 #line 1003 "parse.y"
05416     {
05417                     /*%%%*/
05418                         (yyval.node) = NEW_BEGIN(0);
05419                     /*%
05420                         $$ = dispatch2(stmts_add, dispatch0(stmts_new),
05421                                                   dispatch0(void_stmt));
05422                     %*/
05423                     }
05424     break;
05425 
05426   case 15:
05427 
05428 /* Line 1806 of yacc.c  */
05429 #line 1012 "parse.y"
05430     {
05431                     /*%%%*/
05432                         (yyval.node) = newline_node((yyvsp[(1) - (1)].node));
05433                     /*%
05434                         $$ = dispatch2(stmts_add, dispatch0(stmts_new), $1);
05435                     %*/
05436                     }
05437     break;
05438 
05439   case 16:
05440 
05441 /* Line 1806 of yacc.c  */
05442 #line 1020 "parse.y"
05443     {
05444                     /*%%%*/
05445                         (yyval.node) = block_append((yyvsp[(1) - (3)].node), newline_node((yyvsp[(3) - (3)].node)));
05446                     /*%
05447                         $$ = dispatch2(stmts_add, $1, $3);
05448                     %*/
05449                     }
05450     break;
05451 
05452   case 17:
05453 
05454 /* Line 1806 of yacc.c  */
05455 #line 1028 "parse.y"
05456     {
05457                         (yyval.node) = remove_begin((yyvsp[(2) - (2)].node));
05458                     }
05459     break;
05460 
05461   case 18:
05462 
05463 /* Line 1806 of yacc.c  */
05464 #line 1034 "parse.y"
05465     {
05466                         (yyval.node) = (yyvsp[(1) - (1)].node);
05467                     }
05468     break;
05469 
05470   case 19:
05471 
05472 /* Line 1806 of yacc.c  */
05473 #line 1038 "parse.y"
05474     {
05475                         yyerror("BEGIN is permitted only at toplevel");
05476                     /*%%%*/
05477                         /* local_push(0); */
05478                     /*%
05479                     %*/
05480                     }
05481     break;
05482 
05483   case 20:
05484 
05485 /* Line 1806 of yacc.c  */
05486 #line 1046 "parse.y"
05487     {
05488                     /*%%%*/
05489                         ruby_eval_tree_begin = block_append(ruby_eval_tree_begin,
05490                                                             (yyvsp[(4) - (5)].node));
05491                         /* NEW_PREEXE($4)); */
05492                         /* local_pop(); */
05493                         (yyval.node) = NEW_BEGIN(0);
05494                     /*%
05495                         $$ = dispatch1(BEGIN, $4);
05496                     %*/
05497                     }
05498     break;
05499 
05500   case 21:
05501 
05502 /* Line 1806 of yacc.c  */
05503 #line 1058 "parse.y"
05504     {lex_state = EXPR_FNAME;}
05505     break;
05506 
05507   case 22:
05508 
05509 /* Line 1806 of yacc.c  */
05510 #line 1059 "parse.y"
05511     {
05512                     /*%%%*/
05513                         (yyval.node) = NEW_ALIAS((yyvsp[(2) - (4)].node), (yyvsp[(4) - (4)].node));
05514                     /*%
05515                         $$ = dispatch2(alias, $2, $4);
05516                     %*/
05517                     }
05518     break;
05519 
05520   case 23:
05521 
05522 /* Line 1806 of yacc.c  */
05523 #line 1067 "parse.y"
05524     {
05525                     /*%%%*/
05526                         (yyval.node) = NEW_VALIAS((yyvsp[(2) - (3)].id), (yyvsp[(3) - (3)].id));
05527                     /*%
05528                         $$ = dispatch2(var_alias, $2, $3);
05529                     %*/
05530                     }
05531     break;
05532 
05533   case 24:
05534 
05535 /* Line 1806 of yacc.c  */
05536 #line 1075 "parse.y"
05537     {
05538                     /*%%%*/
05539                         char buf[2];
05540                         buf[0] = '$';
05541                         buf[1] = (char)(yyvsp[(3) - (3)].node)->nd_nth;
05542                         (yyval.node) = NEW_VALIAS((yyvsp[(2) - (3)].id), rb_intern2(buf, 2));
05543                     /*%
05544                         $$ = dispatch2(var_alias, $2, $3);
05545                     %*/
05546                     }
05547     break;
05548 
05549   case 25:
05550 
05551 /* Line 1806 of yacc.c  */
05552 #line 1086 "parse.y"
05553     {
05554                     /*%%%*/
05555                         yyerror("can't make alias for the number variables");
05556                         (yyval.node) = NEW_BEGIN(0);
05557                     /*%
05558                         $$ = dispatch2(var_alias, $2, $3);
05559                         $$ = dispatch1(alias_error, $$);
05560                     %*/
05561                     }
05562     break;
05563 
05564   case 26:
05565 
05566 /* Line 1806 of yacc.c  */
05567 #line 1096 "parse.y"
05568     {
05569                     /*%%%*/
05570                         (yyval.node) = (yyvsp[(2) - (2)].node);
05571                     /*%
05572                         $$ = dispatch1(undef, $2);
05573                     %*/
05574                     }
05575     break;
05576 
05577   case 27:
05578 
05579 /* Line 1806 of yacc.c  */
05580 #line 1104 "parse.y"
05581     {
05582                     /*%%%*/
05583                         (yyval.node) = NEW_IF(cond((yyvsp[(3) - (3)].node)), remove_begin((yyvsp[(1) - (3)].node)), 0);
05584                         fixpos((yyval.node), (yyvsp[(3) - (3)].node));
05585                     /*%
05586                         $$ = dispatch2(if_mod, $3, $1);
05587                     %*/
05588                     }
05589     break;
05590 
05591   case 28:
05592 
05593 /* Line 1806 of yacc.c  */
05594 #line 1113 "parse.y"
05595     {
05596                     /*%%%*/
05597                         (yyval.node) = NEW_UNLESS(cond((yyvsp[(3) - (3)].node)), remove_begin((yyvsp[(1) - (3)].node)), 0);
05598                         fixpos((yyval.node), (yyvsp[(3) - (3)].node));
05599                     /*%
05600                         $$ = dispatch2(unless_mod, $3, $1);
05601                     %*/
05602                     }
05603     break;
05604 
05605   case 29:
05606 
05607 /* Line 1806 of yacc.c  */
05608 #line 1122 "parse.y"
05609     {
05610                     /*%%%*/
05611                         if ((yyvsp[(1) - (3)].node) && nd_type((yyvsp[(1) - (3)].node)) == NODE_BEGIN) {
05612                             (yyval.node) = NEW_WHILE(cond((yyvsp[(3) - (3)].node)), (yyvsp[(1) - (3)].node)->nd_body, 0);
05613                         }
05614                         else {
05615                             (yyval.node) = NEW_WHILE(cond((yyvsp[(3) - (3)].node)), (yyvsp[(1) - (3)].node), 1);
05616                         }
05617                     /*%
05618                         $$ = dispatch2(while_mod, $3, $1);
05619                     %*/
05620                     }
05621     break;
05622 
05623   case 30:
05624 
05625 /* Line 1806 of yacc.c  */
05626 #line 1135 "parse.y"
05627     {
05628                     /*%%%*/
05629                         if ((yyvsp[(1) - (3)].node) && nd_type((yyvsp[(1) - (3)].node)) == NODE_BEGIN) {
05630                             (yyval.node) = NEW_UNTIL(cond((yyvsp[(3) - (3)].node)), (yyvsp[(1) - (3)].node)->nd_body, 0);
05631                         }
05632                         else {
05633                             (yyval.node) = NEW_UNTIL(cond((yyvsp[(3) - (3)].node)), (yyvsp[(1) - (3)].node), 1);
05634                         }
05635                     /*%
05636                         $$ = dispatch2(until_mod, $3, $1);
05637                     %*/
05638                     }
05639     break;
05640 
05641   case 31:
05642 
05643 /* Line 1806 of yacc.c  */
05644 #line 1148 "parse.y"
05645     {
05646                     /*%%%*/
05647                         NODE *resq = NEW_RESBODY(0, remove_begin((yyvsp[(3) - (3)].node)), 0);
05648                         (yyval.node) = NEW_RESCUE(remove_begin((yyvsp[(1) - (3)].node)), resq, 0);
05649                     /*%
05650                         $$ = dispatch2(rescue_mod, $1, $3);
05651                     %*/
05652                     }
05653     break;
05654 
05655   case 32:
05656 
05657 /* Line 1806 of yacc.c  */
05658 #line 1157 "parse.y"
05659     {
05660                         if (in_def || in_single) {
05661                             rb_warn0("END in method; use at_exit");
05662                         }
05663                     /*%%%*/
05664                         (yyval.node) = NEW_POSTEXE(NEW_NODE(
05665                             NODE_SCOPE, 0 /* tbl */, (yyvsp[(3) - (4)].node) /* body */, 0 /* args */));
05666                     /*%
05667                         $$ = dispatch1(END, $3);
05668                     %*/
05669                     }
05670     break;
05671 
05672   case 34:
05673 
05674 /* Line 1806 of yacc.c  */
05675 #line 1170 "parse.y"
05676     {
05677                     /*%%%*/
05678                         value_expr((yyvsp[(3) - (3)].node));
05679                         (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
05680                         (yyval.node) = (yyvsp[(1) - (3)].node);
05681                     /*%
05682                         $$ = dispatch2(massign, $1, $3);
05683                     %*/
05684                     }
05685     break;
05686 
05687   case 35:
05688 
05689 /* Line 1806 of yacc.c  */
05690 #line 1180 "parse.y"
05691     {
05692                         value_expr((yyvsp[(3) - (3)].node));
05693                         (yyval.node) = new_op_assign((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].id), (yyvsp[(3) - (3)].node));
05694                     }
05695     break;
05696 
05697   case 36:
05698 
05699 /* Line 1806 of yacc.c  */
05700 #line 1185 "parse.y"
05701     {
05702                     /*%%%*/
05703                         NODE *args;
05704 
05705                         value_expr((yyvsp[(6) - (6)].node));
05706                         if (!(yyvsp[(3) - (6)].node)) (yyvsp[(3) - (6)].node) = NEW_ZARRAY();
05707                         args = arg_concat((yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node));
05708                         if ((yyvsp[(5) - (6)].id) == tOROP) {
05709                             (yyvsp[(5) - (6)].id) = 0;
05710                         }
05711                         else if ((yyvsp[(5) - (6)].id) == tANDOP) {
05712                             (yyvsp[(5) - (6)].id) = 1;
05713                         }
05714                         (yyval.node) = NEW_OP_ASGN1((yyvsp[(1) - (6)].node), (yyvsp[(5) - (6)].id), args);
05715                         fixpos((yyval.node), (yyvsp[(1) - (6)].node));
05716                     /*%
05717                         $$ = dispatch2(aref_field, $1, escape_Qundef($3));
05718                         $$ = dispatch3(opassign, $$, $5, $6);
05719                     %*/
05720                     }
05721     break;
05722 
05723   case 37:
05724 
05725 /* Line 1806 of yacc.c  */
05726 #line 1206 "parse.y"
05727     {
05728                         value_expr((yyvsp[(5) - (5)].node));
05729                         (yyval.node) = new_attr_op_assign((yyvsp[(1) - (5)].node), ripper_id2sym('.'), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
05730                     }
05731     break;
05732 
05733   case 38:
05734 
05735 /* Line 1806 of yacc.c  */
05736 #line 1211 "parse.y"
05737     {
05738                         value_expr((yyvsp[(5) - (5)].node));
05739                         (yyval.node) = new_attr_op_assign((yyvsp[(1) - (5)].node), ripper_id2sym('.'), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
05740                     }
05741     break;
05742 
05743   case 39:
05744 
05745 /* Line 1806 of yacc.c  */
05746 #line 1216 "parse.y"
05747     {
05748                     /*%%%*/
05749                         (yyval.node) = NEW_COLON2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id));
05750                         (yyval.node) = new_const_op_assign((yyval.node), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
05751                     /*%
05752                         $$ = dispatch2(const_path_field, $1, $3);
05753                         $$ = dispatch3(opassign, $$, $4, $5);
05754                     %*/
05755                     }
05756     break;
05757 
05758   case 40:
05759 
05760 /* Line 1806 of yacc.c  */
05761 #line 1226 "parse.y"
05762     {
05763                         value_expr((yyvsp[(5) - (5)].node));
05764                         (yyval.node) = new_attr_op_assign((yyvsp[(1) - (5)].node), ripper_intern("::"), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
05765                     }
05766     break;
05767 
05768   case 41:
05769 
05770 /* Line 1806 of yacc.c  */
05771 #line 1231 "parse.y"
05772     {
05773                     /*%%%*/
05774                         rb_backref_error((yyvsp[(1) - (3)].node));
05775                         (yyval.node) = NEW_BEGIN(0);
05776                     /*%
05777                         $$ = dispatch2(assign, dispatch1(var_field, $1), $3);
05778                         $$ = dispatch1(assign_error, $$);
05779                     %*/
05780                     }
05781     break;
05782 
05783   case 42:
05784 
05785 /* Line 1806 of yacc.c  */
05786 #line 1241 "parse.y"
05787     {
05788                     /*%%%*/
05789                         value_expr((yyvsp[(3) - (3)].node));
05790                         (yyval.node) = node_assign((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
05791                     /*%
05792                         $$ = dispatch2(assign, $1, $3);
05793                     %*/
05794                     }
05795     break;
05796 
05797   case 43:
05798 
05799 /* Line 1806 of yacc.c  */
05800 #line 1250 "parse.y"
05801     {
05802                     /*%%%*/
05803                         (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
05804                         (yyval.node) = (yyvsp[(1) - (3)].node);
05805                     /*%
05806                         $$ = dispatch2(massign, $1, $3);
05807                     %*/
05808                     }
05809     break;
05810 
05811   case 45:
05812 
05813 /* Line 1806 of yacc.c  */
05814 #line 1262 "parse.y"
05815     {
05816                     /*%%%*/
05817                         value_expr((yyvsp[(3) - (3)].node));
05818                         (yyval.node) = node_assign((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
05819                     /*%
05820                         $$ = dispatch2(assign, $1, $3);
05821                     %*/
05822                     }
05823     break;
05824 
05825   case 46:
05826 
05827 /* Line 1806 of yacc.c  */
05828 #line 1271 "parse.y"
05829     {
05830                     /*%%%*/
05831                         value_expr((yyvsp[(3) - (3)].node));
05832                         (yyval.node) = node_assign((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
05833                     /*%
05834                         $$ = dispatch2(assign, $1, $3);
05835                     %*/
05836                     }
05837     break;
05838 
05839   case 48:
05840 
05841 /* Line 1806 of yacc.c  */
05842 #line 1284 "parse.y"
05843     {
05844                     /*%%%*/
05845                         (yyval.node) = logop(NODE_AND, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
05846                     /*%
05847                         $$ = dispatch3(binary, $1, ripper_intern("and"), $3);
05848                     %*/
05849                     }
05850     break;
05851 
05852   case 49:
05853 
05854 /* Line 1806 of yacc.c  */
05855 #line 1292 "parse.y"
05856     {
05857                     /*%%%*/
05858                         (yyval.node) = logop(NODE_OR, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
05859                     /*%
05860                         $$ = dispatch3(binary, $1, ripper_intern("or"), $3);
05861                     %*/
05862                     }
05863     break;
05864 
05865   case 50:
05866 
05867 /* Line 1806 of yacc.c  */
05868 #line 1300 "parse.y"
05869     {
05870                     /*%%%*/
05871                         (yyval.node) = call_uni_op(cond((yyvsp[(3) - (3)].node)), '!');
05872                     /*%
05873                         $$ = dispatch2(unary, ripper_intern("not"), $3);
05874                     %*/
05875                     }
05876     break;
05877 
05878   case 51:
05879 
05880 /* Line 1806 of yacc.c  */
05881 #line 1308 "parse.y"
05882     {
05883                     /*%%%*/
05884                         (yyval.node) = call_uni_op(cond((yyvsp[(2) - (2)].node)), '!');
05885                     /*%
05886                         $$ = dispatch2(unary, ripper_id2sym('!'), $2);
05887                     %*/
05888                     }
05889     break;
05890 
05891   case 53:
05892 
05893 /* Line 1806 of yacc.c  */
05894 #line 1319 "parse.y"
05895     {
05896                     /*%%%*/
05897                         value_expr((yyvsp[(1) - (1)].node));
05898                         (yyval.node) = (yyvsp[(1) - (1)].node);
05899                         if (!(yyval.node)) (yyval.node) = NEW_NIL();
05900                     /*%
05901                         $$ = $1;
05902                     %*/
05903                     }
05904     break;
05905 
05906   case 57:
05907 
05908 /* Line 1806 of yacc.c  */
05909 #line 1336 "parse.y"
05910     {
05911                     /*%%%*/
05912                         (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
05913                     /*%
05914                         $$ = dispatch3(call, $1, $2, $3);
05915                         $$ = method_arg($$, $4);
05916                     %*/
05917                     }
05918     break;
05919 
05920   case 58:
05921 
05922 /* Line 1806 of yacc.c  */
05923 #line 1347 "parse.y"
05924     {
05925                         (yyvsp[(1) - (1)].vars) = dyna_push();
05926                     /*%%%*/
05927                         (yyval.num) = ruby_sourceline;
05928                     /*%
05929                     %*/
05930                     }
05931     break;
05932 
05933   case 59:
05934 
05935 /* Line 1806 of yacc.c  */
05936 #line 1357 "parse.y"
05937     {
05938                     /*%%%*/
05939                         (yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node));
05940                         nd_set_line((yyval.node), (yyvsp[(2) - (5)].num));
05941                     /*%
05942                         $$ = dispatch2(brace_block, escape_Qundef($3), $4);
05943                     %*/
05944                         dyna_pop((yyvsp[(1) - (5)].vars));
05945                     }
05946     break;
05947 
05948   case 60:
05949 
05950 /* Line 1806 of yacc.c  */
05951 #line 1369 "parse.y"
05952     {
05953                     /*%%%*/
05954                         (yyval.node) = NEW_FCALL((yyvsp[(1) - (1)].id), 0);
05955                         nd_set_line((yyval.node), tokline);
05956                     /*%
05957                     %*/
05958                     }
05959     break;
05960 
05961   case 61:
05962 
05963 /* Line 1806 of yacc.c  */
05964 #line 1379 "parse.y"
05965     {
05966                     /*%%%*/
05967                         (yyval.node) = (yyvsp[(1) - (2)].node);
05968                         (yyval.node)->nd_args = (yyvsp[(2) - (2)].node);
05969                     /*%
05970                         $$ = dispatch2(command, $1, $2);
05971                     %*/
05972                     }
05973     break;
05974 
05975   case 62:
05976 
05977 /* Line 1806 of yacc.c  */
05978 #line 1388 "parse.y"
05979     {
05980                     /*%%%*/
05981                         block_dup_check((yyvsp[(2) - (3)].node),(yyvsp[(3) - (3)].node));
05982                         (yyvsp[(1) - (3)].node)->nd_args = (yyvsp[(2) - (3)].node);
05983                         (yyvsp[(3) - (3)].node)->nd_iter = (yyvsp[(1) - (3)].node);
05984                         (yyval.node) = (yyvsp[(3) - (3)].node);
05985                         fixpos((yyval.node), (yyvsp[(1) - (3)].node));
05986                     /*%
05987                         $$ = dispatch2(command, $1, $2);
05988                         $$ = method_add_block($$, $3);
05989                     %*/
05990                     }
05991     break;
05992 
05993   case 63:
05994 
05995 /* Line 1806 of yacc.c  */
05996 #line 1401 "parse.y"
05997     {
05998                     /*%%%*/
05999                         (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
06000                         fixpos((yyval.node), (yyvsp[(1) - (4)].node));
06001                     /*%
06002                         $$ = dispatch4(command_call, $1, ripper_id2sym('.'), $3, $4);
06003                     %*/
06004                     }
06005     break;
06006 
06007   case 64:
06008 
06009 /* Line 1806 of yacc.c  */
06010 #line 1410 "parse.y"
06011     {
06012                     /*%%%*/
06013                         block_dup_check((yyvsp[(4) - (5)].node),(yyvsp[(5) - (5)].node));
06014                         (yyvsp[(5) - (5)].node)->nd_iter = NEW_CALL((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].node));
06015                         (yyval.node) = (yyvsp[(5) - (5)].node);
06016                         fixpos((yyval.node), (yyvsp[(1) - (5)].node));
06017                     /*%
06018                         $$ = dispatch4(command_call, $1, ripper_id2sym('.'), $3, $4);
06019                         $$ = method_add_block($$, $5);
06020                     %*/
06021                    }
06022     break;
06023 
06024   case 65:
06025 
06026 /* Line 1806 of yacc.c  */
06027 #line 1422 "parse.y"
06028     {
06029                     /*%%%*/
06030                         (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
06031                         fixpos((yyval.node), (yyvsp[(1) - (4)].node));
06032                     /*%
06033                         $$ = dispatch4(command_call, $1, ripper_intern("::"), $3, $4);
06034                     %*/
06035                     }
06036     break;
06037 
06038   case 66:
06039 
06040 /* Line 1806 of yacc.c  */
06041 #line 1431 "parse.y"
06042     {
06043                     /*%%%*/
06044                         block_dup_check((yyvsp[(4) - (5)].node),(yyvsp[(5) - (5)].node));
06045                         (yyvsp[(5) - (5)].node)->nd_iter = NEW_CALL((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].node));
06046                         (yyval.node) = (yyvsp[(5) - (5)].node);
06047                         fixpos((yyval.node), (yyvsp[(1) - (5)].node));
06048                     /*%
06049                         $$ = dispatch4(command_call, $1, ripper_intern("::"), $3, $4);
06050                         $$ = method_add_block($$, $5);
06051                     %*/
06052                    }
06053     break;
06054 
06055   case 67:
06056 
06057 /* Line 1806 of yacc.c  */
06058 #line 1443 "parse.y"
06059     {
06060                     /*%%%*/
06061                         (yyval.node) = NEW_SUPER((yyvsp[(2) - (2)].node));
06062                         fixpos((yyval.node), (yyvsp[(2) - (2)].node));
06063                     /*%
06064                         $$ = dispatch1(super, $2);
06065                     %*/
06066                     }
06067     break;
06068 
06069   case 68:
06070 
06071 /* Line 1806 of yacc.c  */
06072 #line 1452 "parse.y"
06073     {
06074                     /*%%%*/
06075                         (yyval.node) = new_yield((yyvsp[(2) - (2)].node));
06076                         fixpos((yyval.node), (yyvsp[(2) - (2)].node));
06077                     /*%
06078                         $$ = dispatch1(yield, $2);
06079                     %*/
06080                     }
06081     break;
06082 
06083   case 69:
06084 
06085 /* Line 1806 of yacc.c  */
06086 #line 1461 "parse.y"
06087     {
06088                     /*%%%*/
06089                         (yyval.node) = NEW_RETURN(ret_args((yyvsp[(2) - (2)].node)));
06090                     /*%
06091                         $$ = dispatch1(return, $2);
06092                     %*/
06093                     }
06094     break;
06095 
06096   case 70:
06097 
06098 /* Line 1806 of yacc.c  */
06099 #line 1469 "parse.y"
06100     {
06101                     /*%%%*/
06102                         (yyval.node) = NEW_BREAK(ret_args((yyvsp[(2) - (2)].node)));
06103                     /*%
06104                         $$ = dispatch1(break, $2);
06105                     %*/
06106                     }
06107     break;
06108 
06109   case 71:
06110 
06111 /* Line 1806 of yacc.c  */
06112 #line 1477 "parse.y"
06113     {
06114                     /*%%%*/
06115                         (yyval.node) = NEW_NEXT(ret_args((yyvsp[(2) - (2)].node)));
06116                     /*%
06117                         $$ = dispatch1(next, $2);
06118                     %*/
06119                     }
06120     break;
06121 
06122   case 73:
06123 
06124 /* Line 1806 of yacc.c  */
06125 #line 1488 "parse.y"
06126     {
06127                     /*%%%*/
06128                         (yyval.node) = (yyvsp[(2) - (3)].node);
06129                     /*%
06130                         $$ = dispatch1(mlhs_paren, $2);
06131                     %*/
06132                     }
06133     break;
06134 
06135   case 75:
06136 
06137 /* Line 1806 of yacc.c  */
06138 #line 1499 "parse.y"
06139     {
06140                     /*%%%*/
06141                         (yyval.node) = NEW_MASGN(NEW_LIST((yyvsp[(2) - (3)].node)), 0);
06142                     /*%
06143                         $$ = dispatch1(mlhs_paren, $2);
06144                     %*/
06145                     }
06146     break;
06147 
06148   case 76:
06149 
06150 /* Line 1806 of yacc.c  */
06151 #line 1509 "parse.y"
06152     {
06153                     /*%%%*/
06154                         (yyval.node) = NEW_MASGN((yyvsp[(1) - (1)].node), 0);
06155                     /*%
06156                         $$ = $1;
06157                     %*/
06158                     }
06159     break;
06160 
06161   case 77:
06162 
06163 /* Line 1806 of yacc.c  */
06164 #line 1517 "parse.y"
06165     {
06166                     /*%%%*/
06167                         (yyval.node) = NEW_MASGN(list_append((yyvsp[(1) - (2)].node),(yyvsp[(2) - (2)].node)), 0);
06168                     /*%
06169                         $$ = mlhs_add($1, $2);
06170                     %*/
06171                     }
06172     break;
06173 
06174   case 78:
06175 
06176 /* Line 1806 of yacc.c  */
06177 #line 1525 "parse.y"
06178     {
06179                     /*%%%*/
06180                         (yyval.node) = NEW_MASGN((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
06181                     /*%
06182                         $$ = mlhs_add_star($1, $3);
06183                     %*/
06184                     }
06185     break;
06186 
06187   case 79:
06188 
06189 /* Line 1806 of yacc.c  */
06190 #line 1533 "parse.y"
06191     {
06192                     /*%%%*/
06193                         (yyval.node) = NEW_MASGN((yyvsp[(1) - (5)].node), NEW_POSTARG((yyvsp[(3) - (5)].node),(yyvsp[(5) - (5)].node)));
06194                     /*%
06195                         $1 = mlhs_add_star($1, $3);
06196                         $$ = mlhs_add($1, $5);
06197                     %*/
06198                     }
06199     break;
06200 
06201   case 80:
06202 
06203 /* Line 1806 of yacc.c  */
06204 #line 1542 "parse.y"
06205     {
06206                     /*%%%*/
06207                         (yyval.node) = NEW_MASGN((yyvsp[(1) - (2)].node), -1);
06208                     /*%
06209                         $$ = mlhs_add_star($1, Qnil);
06210                     %*/
06211                     }
06212     break;
06213 
06214   case 81:
06215 
06216 /* Line 1806 of yacc.c  */
06217 #line 1550 "parse.y"
06218     {
06219                     /*%%%*/
06220                         (yyval.node) = NEW_MASGN((yyvsp[(1) - (4)].node), NEW_POSTARG(-1, (yyvsp[(4) - (4)].node)));
06221                     /*%
06222                         $1 = mlhs_add_star($1, Qnil);
06223                         $$ = mlhs_add($1, $4);
06224                     %*/
06225                     }
06226     break;
06227 
06228   case 82:
06229 
06230 /* Line 1806 of yacc.c  */
06231 #line 1559 "parse.y"
06232     {
06233                     /*%%%*/
06234                         (yyval.node) = NEW_MASGN(0, (yyvsp[(2) - (2)].node));
06235                     /*%
06236                         $$ = mlhs_add_star(mlhs_new(), $2);
06237                     %*/
06238                     }
06239     break;
06240 
06241   case 83:
06242 
06243 /* Line 1806 of yacc.c  */
06244 #line 1567 "parse.y"
06245     {
06246                     /*%%%*/
06247                         (yyval.node) = NEW_MASGN(0, NEW_POSTARG((yyvsp[(2) - (4)].node),(yyvsp[(4) - (4)].node)));
06248                     /*%
06249                         $2 = mlhs_add_star(mlhs_new(), $2);
06250                         $$ = mlhs_add($2, $4);
06251                     %*/
06252                     }
06253     break;
06254 
06255   case 84:
06256 
06257 /* Line 1806 of yacc.c  */
06258 #line 1576 "parse.y"
06259     {
06260                     /*%%%*/
06261                         (yyval.node) = NEW_MASGN(0, -1);
06262                     /*%
06263                         $$ = mlhs_add_star(mlhs_new(), Qnil);
06264                     %*/
06265                     }
06266     break;
06267 
06268   case 85:
06269 
06270 /* Line 1806 of yacc.c  */
06271 #line 1584 "parse.y"
06272     {
06273                     /*%%%*/
06274                         (yyval.node) = NEW_MASGN(0, NEW_POSTARG(-1, (yyvsp[(3) - (3)].node)));
06275                     /*%
06276                         $$ = mlhs_add_star(mlhs_new(), Qnil);
06277                         $$ = mlhs_add($$, $3);
06278                     %*/
06279                     }
06280     break;
06281 
06282   case 87:
06283 
06284 /* Line 1806 of yacc.c  */
06285 #line 1596 "parse.y"
06286     {
06287                     /*%%%*/
06288                         (yyval.node) = (yyvsp[(2) - (3)].node);
06289                     /*%
06290                         $$ = dispatch1(mlhs_paren, $2);
06291                     %*/
06292                     }
06293     break;
06294 
06295   case 88:
06296 
06297 /* Line 1806 of yacc.c  */
06298 #line 1606 "parse.y"
06299     {
06300                     /*%%%*/
06301                         (yyval.node) = NEW_LIST((yyvsp[(1) - (2)].node));
06302                     /*%
06303                         $$ = mlhs_add(mlhs_new(), $1);
06304                     %*/
06305                     }
06306     break;
06307 
06308   case 89:
06309 
06310 /* Line 1806 of yacc.c  */
06311 #line 1614 "parse.y"
06312     {
06313                     /*%%%*/
06314                         (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].node));
06315                     /*%
06316                         $$ = mlhs_add($1, $2);
06317                     %*/
06318                     }
06319     break;
06320 
06321   case 90:
06322 
06323 /* Line 1806 of yacc.c  */
06324 #line 1624 "parse.y"
06325     {
06326                     /*%%%*/
06327                         (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
06328                     /*%
06329                         $$ = mlhs_add(mlhs_new(), $1);
06330                     %*/
06331                     }
06332     break;
06333 
06334   case 91:
06335 
06336 /* Line 1806 of yacc.c  */
06337 #line 1632 "parse.y"
06338     {
06339                     /*%%%*/
06340                         (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
06341                     /*%
06342                         $$ = mlhs_add($1, $3);
06343                     %*/
06344                     }
06345     break;
06346 
06347   case 92:
06348 
06349 /* Line 1806 of yacc.c  */
06350 #line 1642 "parse.y"
06351     {
06352                         (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
06353                     }
06354     break;
06355 
06356   case 93:
06357 
06358 /* Line 1806 of yacc.c  */
06359 #line 1646 "parse.y"
06360     {
06361                         (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
06362                     }
06363     break;
06364 
06365   case 94:
06366 
06367 /* Line 1806 of yacc.c  */
06368 #line 1650 "parse.y"
06369     {
06370                     /*%%%*/
06371                         (yyval.node) = aryset((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node));
06372                     /*%
06373                         $$ = dispatch2(aref_field, $1, escape_Qundef($3));
06374                     %*/
06375                     }
06376     break;
06377 
06378   case 95:
06379 
06380 /* Line 1806 of yacc.c  */
06381 #line 1658 "parse.y"
06382     {
06383                     /*%%%*/
06384                         (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06385                     /*%
06386                         $$ = dispatch3(field, $1, ripper_id2sym('.'), $3);
06387                     %*/
06388                     }
06389     break;
06390 
06391   case 96:
06392 
06393 /* Line 1806 of yacc.c  */
06394 #line 1666 "parse.y"
06395     {
06396                     /*%%%*/
06397                         (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06398                     /*%
06399                         $$ = dispatch2(const_path_field, $1, $3);
06400                     %*/
06401                     }
06402     break;
06403 
06404   case 97:
06405 
06406 /* Line 1806 of yacc.c  */
06407 #line 1674 "parse.y"
06408     {
06409                     /*%%%*/
06410                         (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06411                     /*%
06412                         $$ = dispatch3(field, $1, ripper_id2sym('.'), $3);
06413                     %*/
06414                     }
06415     break;
06416 
06417   case 98:
06418 
06419 /* Line 1806 of yacc.c  */
06420 #line 1682 "parse.y"
06421     {
06422                     /*%%%*/
06423                         if (in_def || in_single)
06424                             yyerror("dynamic constant assignment");
06425                         (yyval.node) = NEW_CDECL(0, 0, NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id)));
06426                     /*%
06427                         if (in_def || in_single)
06428                             yyerror("dynamic constant assignment");
06429                         $$ = dispatch2(const_path_field, $1, $3);
06430                     %*/
06431                     }
06432     break;
06433 
06434   case 99:
06435 
06436 /* Line 1806 of yacc.c  */
06437 #line 1694 "parse.y"
06438     {
06439                     /*%%%*/
06440                         if (in_def || in_single)
06441                             yyerror("dynamic constant assignment");
06442                         (yyval.node) = NEW_CDECL(0, 0, NEW_COLON3((yyvsp[(2) - (2)].id)));
06443                     /*%
06444                         $$ = dispatch1(top_const_field, $2);
06445                     %*/
06446                     }
06447     break;
06448 
06449   case 100:
06450 
06451 /* Line 1806 of yacc.c  */
06452 #line 1704 "parse.y"
06453     {
06454                     /*%%%*/
06455                         rb_backref_error((yyvsp[(1) - (1)].node));
06456                         (yyval.node) = NEW_BEGIN(0);
06457                     /*%
06458                         $$ = dispatch1(var_field, $1);
06459                         $$ = dispatch1(assign_error, $$);
06460                     %*/
06461                     }
06462     break;
06463 
06464   case 101:
06465 
06466 /* Line 1806 of yacc.c  */
06467 #line 1716 "parse.y"
06468     {
06469                         (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
06470                     /*%%%*/
06471                         if (!(yyval.node)) (yyval.node) = NEW_BEGIN(0);
06472                     /*%
06473                         $$ = dispatch1(var_field, $$);
06474                     %*/
06475                     }
06476     break;
06477 
06478   case 102:
06479 
06480 /* Line 1806 of yacc.c  */
06481 #line 1725 "parse.y"
06482     {
06483                         (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
06484                     /*%%%*/
06485                         if (!(yyval.node)) (yyval.node) = NEW_BEGIN(0);
06486                     /*%
06487                         $$ = dispatch1(var_field, $$);
06488                     %*/
06489                     }
06490     break;
06491 
06492   case 103:
06493 
06494 /* Line 1806 of yacc.c  */
06495 #line 1734 "parse.y"
06496     {
06497                     /*%%%*/
06498                         (yyval.node) = aryset((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node));
06499                     /*%
06500                         $$ = dispatch2(aref_field, $1, escape_Qundef($3));
06501                     %*/
06502                     }
06503     break;
06504 
06505   case 104:
06506 
06507 /* Line 1806 of yacc.c  */
06508 #line 1742 "parse.y"
06509     {
06510                     /*%%%*/
06511                         (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06512                     /*%
06513                         $$ = dispatch3(field, $1, ripper_id2sym('.'), $3);
06514                     %*/
06515                     }
06516     break;
06517 
06518   case 105:
06519 
06520 /* Line 1806 of yacc.c  */
06521 #line 1750 "parse.y"
06522     {
06523                     /*%%%*/
06524                         (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06525                     /*%
06526                         $$ = dispatch3(field, $1, ripper_intern("::"), $3);
06527                     %*/
06528                     }
06529     break;
06530 
06531   case 106:
06532 
06533 /* Line 1806 of yacc.c  */
06534 #line 1758 "parse.y"
06535     {
06536                     /*%%%*/
06537                         (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06538                     /*%
06539                         $$ = dispatch3(field, $1, ripper_id2sym('.'), $3);
06540                     %*/
06541                     }
06542     break;
06543 
06544   case 107:
06545 
06546 /* Line 1806 of yacc.c  */
06547 #line 1766 "parse.y"
06548     {
06549                     /*%%%*/
06550                         if (in_def || in_single)
06551                             yyerror("dynamic constant assignment");
06552                         (yyval.node) = NEW_CDECL(0, 0, NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id)));
06553                     /*%
06554                         $$ = dispatch2(const_path_field, $1, $3);
06555                         if (in_def || in_single) {
06556                             $$ = dispatch1(assign_error, $$);
06557                         }
06558                     %*/
06559                     }
06560     break;
06561 
06562   case 108:
06563 
06564 /* Line 1806 of yacc.c  */
06565 #line 1779 "parse.y"
06566     {
06567                     /*%%%*/
06568                         if (in_def || in_single)
06569                             yyerror("dynamic constant assignment");
06570                         (yyval.node) = NEW_CDECL(0, 0, NEW_COLON3((yyvsp[(2) - (2)].id)));
06571                     /*%
06572                         $$ = dispatch1(top_const_field, $2);
06573                         if (in_def || in_single) {
06574                             $$ = dispatch1(assign_error, $$);
06575                         }
06576                     %*/
06577                     }
06578     break;
06579 
06580   case 109:
06581 
06582 /* Line 1806 of yacc.c  */
06583 #line 1792 "parse.y"
06584     {
06585                     /*%%%*/
06586                         rb_backref_error((yyvsp[(1) - (1)].node));
06587                         (yyval.node) = NEW_BEGIN(0);
06588                     /*%
06589                         $$ = dispatch1(assign_error, $1);
06590                     %*/
06591                     }
06592     break;
06593 
06594   case 110:
06595 
06596 /* Line 1806 of yacc.c  */
06597 #line 1803 "parse.y"
06598     {
06599                     /*%%%*/
06600                         yyerror("class/module name must be CONSTANT");
06601                     /*%
06602                         $$ = dispatch1(class_name_error, $1);
06603                     %*/
06604                     }
06605     break;
06606 
06607   case 112:
06608 
06609 /* Line 1806 of yacc.c  */
06610 #line 1814 "parse.y"
06611     {
06612                     /*%%%*/
06613                         (yyval.node) = NEW_COLON3((yyvsp[(2) - (2)].id));
06614                     /*%
06615                         $$ = dispatch1(top_const_ref, $2);
06616                     %*/
06617                     }
06618     break;
06619 
06620   case 113:
06621 
06622 /* Line 1806 of yacc.c  */
06623 #line 1822 "parse.y"
06624     {
06625                     /*%%%*/
06626                         (yyval.node) = NEW_COLON2(0, (yyval.node));
06627                     /*%
06628                         $$ = dispatch1(const_ref, $1);
06629                     %*/
06630                     }
06631     break;
06632 
06633   case 114:
06634 
06635 /* Line 1806 of yacc.c  */
06636 #line 1830 "parse.y"
06637     {
06638                     /*%%%*/
06639                         (yyval.node) = NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06640                     /*%
06641                         $$ = dispatch2(const_path_ref, $1, $3);
06642                     %*/
06643                     }
06644     break;
06645 
06646   case 118:
06647 
06648 /* Line 1806 of yacc.c  */
06649 #line 1843 "parse.y"
06650     {
06651                         lex_state = EXPR_ENDFN;
06652                         (yyval.id) = (yyvsp[(1) - (1)].id);
06653                     }
06654     break;
06655 
06656   case 119:
06657 
06658 /* Line 1806 of yacc.c  */
06659 #line 1848 "parse.y"
06660     {
06661                         lex_state = EXPR_ENDFN;
06662                     /*%%%*/
06663                         (yyval.id) = (yyvsp[(1) - (1)].id);
06664                     /*%
06665                         $$ = $1;
06666                     %*/
06667                     }
06668     break;
06669 
06670   case 122:
06671 
06672 /* Line 1806 of yacc.c  */
06673 #line 1863 "parse.y"
06674     {
06675                     /*%%%*/
06676                         (yyval.node) = NEW_LIT(ID2SYM((yyvsp[(1) - (1)].id)));
06677                     /*%
06678                         $$ = dispatch1(symbol_literal, $1);
06679                     %*/
06680                     }
06681     break;
06682 
06683   case 124:
06684 
06685 /* Line 1806 of yacc.c  */
06686 #line 1874 "parse.y"
06687     {
06688                     /*%%%*/
06689                         (yyval.node) = NEW_UNDEF((yyvsp[(1) - (1)].node));
06690                     /*%
06691                         $$ = rb_ary_new3(1, $1);
06692                     %*/
06693                     }
06694     break;
06695 
06696   case 125:
06697 
06698 /* Line 1806 of yacc.c  */
06699 #line 1881 "parse.y"
06700     {lex_state = EXPR_FNAME;}
06701     break;
06702 
06703   case 126:
06704 
06705 /* Line 1806 of yacc.c  */
06706 #line 1882 "parse.y"
06707     {
06708                     /*%%%*/
06709                         (yyval.node) = block_append((yyvsp[(1) - (4)].node), NEW_UNDEF((yyvsp[(4) - (4)].node)));
06710                     /*%
06711                         rb_ary_push($1, $4);
06712                     %*/
06713                     }
06714     break;
06715 
06716   case 127:
06717 
06718 /* Line 1806 of yacc.c  */
06719 #line 1891 "parse.y"
06720     { ifndef_ripper((yyval.id) = '|'); }
06721     break;
06722 
06723   case 128:
06724 
06725 /* Line 1806 of yacc.c  */
06726 #line 1892 "parse.y"
06727     { ifndef_ripper((yyval.id) = '^'); }
06728     break;
06729 
06730   case 129:
06731 
06732 /* Line 1806 of yacc.c  */
06733 #line 1893 "parse.y"
06734     { ifndef_ripper((yyval.id) = '&'); }
06735     break;
06736 
06737   case 130:
06738 
06739 /* Line 1806 of yacc.c  */
06740 #line 1894 "parse.y"
06741     { ifndef_ripper((yyval.id) = tCMP); }
06742     break;
06743 
06744   case 131:
06745 
06746 /* Line 1806 of yacc.c  */
06747 #line 1895 "parse.y"
06748     { ifndef_ripper((yyval.id) = tEQ); }
06749     break;
06750 
06751   case 132:
06752 
06753 /* Line 1806 of yacc.c  */
06754 #line 1896 "parse.y"
06755     { ifndef_ripper((yyval.id) = tEQQ); }
06756     break;
06757 
06758   case 133:
06759 
06760 /* Line 1806 of yacc.c  */
06761 #line 1897 "parse.y"
06762     { ifndef_ripper((yyval.id) = tMATCH); }
06763     break;
06764 
06765   case 134:
06766 
06767 /* Line 1806 of yacc.c  */
06768 #line 1898 "parse.y"
06769     { ifndef_ripper((yyval.id) = tNMATCH); }
06770     break;
06771 
06772   case 135:
06773 
06774 /* Line 1806 of yacc.c  */
06775 #line 1899 "parse.y"
06776     { ifndef_ripper((yyval.id) = '>'); }
06777     break;
06778 
06779   case 136:
06780 
06781 /* Line 1806 of yacc.c  */
06782 #line 1900 "parse.y"
06783     { ifndef_ripper((yyval.id) = tGEQ); }
06784     break;
06785 
06786   case 137:
06787 
06788 /* Line 1806 of yacc.c  */
06789 #line 1901 "parse.y"
06790     { ifndef_ripper((yyval.id) = '<'); }
06791     break;
06792 
06793   case 138:
06794 
06795 /* Line 1806 of yacc.c  */
06796 #line 1902 "parse.y"
06797     { ifndef_ripper((yyval.id) = tLEQ); }
06798     break;
06799 
06800   case 139:
06801 
06802 /* Line 1806 of yacc.c  */
06803 #line 1903 "parse.y"
06804     { ifndef_ripper((yyval.id) = tNEQ); }
06805     break;
06806 
06807   case 140:
06808 
06809 /* Line 1806 of yacc.c  */
06810 #line 1904 "parse.y"
06811     { ifndef_ripper((yyval.id) = tLSHFT); }
06812     break;
06813 
06814   case 141:
06815 
06816 /* Line 1806 of yacc.c  */
06817 #line 1905 "parse.y"
06818     { ifndef_ripper((yyval.id) = tRSHFT); }
06819     break;
06820 
06821   case 142:
06822 
06823 /* Line 1806 of yacc.c  */
06824 #line 1906 "parse.y"
06825     { ifndef_ripper((yyval.id) = '+'); }
06826     break;
06827 
06828   case 143:
06829 
06830 /* Line 1806 of yacc.c  */
06831 #line 1907 "parse.y"
06832     { ifndef_ripper((yyval.id) = '-'); }
06833     break;
06834 
06835   case 144:
06836 
06837 /* Line 1806 of yacc.c  */
06838 #line 1908 "parse.y"
06839     { ifndef_ripper((yyval.id) = '*'); }
06840     break;
06841 
06842   case 145:
06843 
06844 /* Line 1806 of yacc.c  */
06845 #line 1909 "parse.y"
06846     { ifndef_ripper((yyval.id) = '*'); }
06847     break;
06848 
06849   case 146:
06850 
06851 /* Line 1806 of yacc.c  */
06852 #line 1910 "parse.y"
06853     { ifndef_ripper((yyval.id) = '/'); }
06854     break;
06855 
06856   case 147:
06857 
06858 /* Line 1806 of yacc.c  */
06859 #line 1911 "parse.y"
06860     { ifndef_ripper((yyval.id) = '%'); }
06861     break;
06862 
06863   case 148:
06864 
06865 /* Line 1806 of yacc.c  */
06866 #line 1912 "parse.y"
06867     { ifndef_ripper((yyval.id) = tPOW); }
06868     break;
06869 
06870   case 149:
06871 
06872 /* Line 1806 of yacc.c  */
06873 #line 1913 "parse.y"
06874     { ifndef_ripper((yyval.id) = tDSTAR); }
06875     break;
06876 
06877   case 150:
06878 
06879 /* Line 1806 of yacc.c  */
06880 #line 1914 "parse.y"
06881     { ifndef_ripper((yyval.id) = '!'); }
06882     break;
06883 
06884   case 151:
06885 
06886 /* Line 1806 of yacc.c  */
06887 #line 1915 "parse.y"
06888     { ifndef_ripper((yyval.id) = '~'); }
06889     break;
06890 
06891   case 152:
06892 
06893 /* Line 1806 of yacc.c  */
06894 #line 1916 "parse.y"
06895     { ifndef_ripper((yyval.id) = tUPLUS); }
06896     break;
06897 
06898   case 153:
06899 
06900 /* Line 1806 of yacc.c  */
06901 #line 1917 "parse.y"
06902     { ifndef_ripper((yyval.id) = tUMINUS); }
06903     break;
06904 
06905   case 154:
06906 
06907 /* Line 1806 of yacc.c  */
06908 #line 1918 "parse.y"
06909     { ifndef_ripper((yyval.id) = tAREF); }
06910     break;
06911 
06912   case 155:
06913 
06914 /* Line 1806 of yacc.c  */
06915 #line 1919 "parse.y"
06916     { ifndef_ripper((yyval.id) = tASET); }
06917     break;
06918 
06919   case 156:
06920 
06921 /* Line 1806 of yacc.c  */
06922 #line 1920 "parse.y"
06923     { ifndef_ripper((yyval.id) = '`'); }
06924     break;
06925 
06926   case 198:
06927 
06928 /* Line 1806 of yacc.c  */
06929 #line 1938 "parse.y"
06930     {
06931                     /*%%%*/
06932                         value_expr((yyvsp[(3) - (3)].node));
06933                         (yyval.node) = node_assign((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
06934                     /*%
06935                         $$ = dispatch2(assign, $1, $3);
06936                     %*/
06937                     }
06938     break;
06939 
06940   case 199:
06941 
06942 /* Line 1806 of yacc.c  */
06943 #line 1947 "parse.y"
06944     {
06945                     /*%%%*/
06946                         value_expr((yyvsp[(3) - (5)].node));
06947                         (yyvsp[(3) - (5)].node) = NEW_RESCUE((yyvsp[(3) - (5)].node), NEW_RESBODY(0,(yyvsp[(5) - (5)].node),0), 0);
06948                         (yyval.node) = node_assign((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].node));
06949                     /*%
06950                         $$ = dispatch2(assign, $1, dispatch2(rescue_mod, $3, $5));
06951                     %*/
06952                     }
06953     break;
06954 
06955   case 200:
06956 
06957 /* Line 1806 of yacc.c  */
06958 #line 1957 "parse.y"
06959     {
06960                         value_expr((yyvsp[(3) - (3)].node));
06961                         (yyval.node) = new_op_assign((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].id), (yyvsp[(3) - (3)].node));
06962                     }
06963     break;
06964 
06965   case 201:
06966 
06967 /* Line 1806 of yacc.c  */
06968 #line 1962 "parse.y"
06969     {
06970                     /*%%%*/
06971                         value_expr((yyvsp[(3) - (5)].node));
06972                         (yyvsp[(3) - (5)].node) = NEW_RESCUE((yyvsp[(3) - (5)].node), NEW_RESBODY(0,(yyvsp[(5) - (5)].node),0), 0);
06973                     /*%
06974                         $3 = dispatch2(rescue_mod, $3, $5);
06975                     %*/
06976                         (yyval.node) = new_op_assign((yyvsp[(1) - (5)].node), (yyvsp[(2) - (5)].id), (yyvsp[(3) - (5)].node));
06977                     }
06978     break;
06979 
06980   case 202:
06981 
06982 /* Line 1806 of yacc.c  */
06983 #line 1972 "parse.y"
06984     {
06985                     /*%%%*/
06986                         NODE *args;
06987 
06988                         value_expr((yyvsp[(6) - (6)].node));
06989                         if (!(yyvsp[(3) - (6)].node)) (yyvsp[(3) - (6)].node) = NEW_ZARRAY();
06990                         if (nd_type((yyvsp[(3) - (6)].node)) == NODE_BLOCK_PASS) {
06991                             args = NEW_ARGSCAT((yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node));
06992                         }
06993                         else {
06994                             args = arg_concat((yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node));
06995                         }
06996                         if ((yyvsp[(5) - (6)].id) == tOROP) {
06997                             (yyvsp[(5) - (6)].id) = 0;
06998                         }
06999                         else if ((yyvsp[(5) - (6)].id) == tANDOP) {
07000                             (yyvsp[(5) - (6)].id) = 1;
07001                         }
07002                         (yyval.node) = NEW_OP_ASGN1((yyvsp[(1) - (6)].node), (yyvsp[(5) - (6)].id), args);
07003                         fixpos((yyval.node), (yyvsp[(1) - (6)].node));
07004                     /*%
07005                         $1 = dispatch2(aref_field, $1, escape_Qundef($3));
07006                         $$ = dispatch3(opassign, $1, $5, $6);
07007                     %*/
07008                     }
07009     break;
07010 
07011   case 203:
07012 
07013 /* Line 1806 of yacc.c  */
07014 #line 1998 "parse.y"
07015     {
07016                         value_expr((yyvsp[(5) - (5)].node));
07017                         (yyval.node) = new_attr_op_assign((yyvsp[(1) - (5)].node), ripper_id2sym('.'), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
07018                     }
07019     break;
07020 
07021   case 204:
07022 
07023 /* Line 1806 of yacc.c  */
07024 #line 2003 "parse.y"
07025     {
07026                         value_expr((yyvsp[(5) - (5)].node));
07027                         (yyval.node) = new_attr_op_assign((yyvsp[(1) - (5)].node), ripper_id2sym('.'), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
07028                     }
07029     break;
07030 
07031   case 205:
07032 
07033 /* Line 1806 of yacc.c  */
07034 #line 2008 "parse.y"
07035     {
07036                         value_expr((yyvsp[(5) - (5)].node));
07037                         (yyval.node) = new_attr_op_assign((yyvsp[(1) - (5)].node), ripper_intern("::"), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
07038                     }
07039     break;
07040 
07041   case 206:
07042 
07043 /* Line 1806 of yacc.c  */
07044 #line 2013 "parse.y"
07045     {
07046                     /*%%%*/
07047                         (yyval.node) = NEW_COLON2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id));
07048                         (yyval.node) = new_const_op_assign((yyval.node), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
07049                     /*%
07050                         $$ = dispatch2(const_path_field, $1, $3);
07051                         $$ = dispatch3(opassign, $$, $4, $5);
07052                     %*/
07053                     }
07054     break;
07055 
07056   case 207:
07057 
07058 /* Line 1806 of yacc.c  */
07059 #line 2023 "parse.y"
07060     {
07061                     /*%%%*/
07062                         (yyval.node) = NEW_COLON3((yyvsp[(2) - (4)].id));
07063                         (yyval.node) = new_const_op_assign((yyval.node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
07064                     /*%
07065                         $$ = dispatch1(top_const_field, $2);
07066                         $$ = dispatch3(opassign, $$, $3, $4);
07067                     %*/
07068                     }
07069     break;
07070 
07071   case 208:
07072 
07073 /* Line 1806 of yacc.c  */
07074 #line 2033 "parse.y"
07075     {
07076                     /*%%%*/
07077                         rb_backref_error((yyvsp[(1) - (3)].node));
07078                         (yyval.node) = NEW_BEGIN(0);
07079                     /*%
07080                         $$ = dispatch1(var_field, $1);
07081                         $$ = dispatch3(opassign, $$, $2, $3);
07082                         $$ = dispatch1(assign_error, $$);
07083                     %*/
07084                     }
07085     break;
07086 
07087   case 209:
07088 
07089 /* Line 1806 of yacc.c  */
07090 #line 2044 "parse.y"
07091     {
07092                     /*%%%*/
07093                         value_expr((yyvsp[(1) - (3)].node));
07094                         value_expr((yyvsp[(3) - (3)].node));
07095                         (yyval.node) = NEW_DOT2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
07096                         if (nd_type((yyvsp[(1) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(1) - (3)].node)->nd_lit) &&
07097                             nd_type((yyvsp[(3) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(3) - (3)].node)->nd_lit)) {
07098                             deferred_nodes = list_append(deferred_nodes, (yyval.node));
07099                         }
07100                     /*%
07101                         $$ = dispatch2(dot2, $1, $3);
07102                     %*/
07103                     }
07104     break;
07105 
07106   case 210:
07107 
07108 /* Line 1806 of yacc.c  */
07109 #line 2058 "parse.y"
07110     {
07111                     /*%%%*/
07112                         value_expr((yyvsp[(1) - (3)].node));
07113                         value_expr((yyvsp[(3) - (3)].node));
07114                         (yyval.node) = NEW_DOT3((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
07115                         if (nd_type((yyvsp[(1) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(1) - (3)].node)->nd_lit) &&
07116                             nd_type((yyvsp[(3) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(3) - (3)].node)->nd_lit)) {
07117                             deferred_nodes = list_append(deferred_nodes, (yyval.node));
07118                         }
07119                     /*%
07120                         $$ = dispatch2(dot3, $1, $3);
07121                     %*/
07122                     }
07123     break;
07124 
07125   case 211:
07126 
07127 /* Line 1806 of yacc.c  */
07128 #line 2072 "parse.y"
07129     {
07130                     /*%%%*/
07131                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '+', (yyvsp[(3) - (3)].node));
07132                     /*%
07133                         $$ = dispatch3(binary, $1, ID2SYM('+'), $3);
07134                     %*/
07135                     }
07136     break;
07137 
07138   case 212:
07139 
07140 /* Line 1806 of yacc.c  */
07141 #line 2080 "parse.y"
07142     {
07143                     /*%%%*/
07144                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '-', (yyvsp[(3) - (3)].node));
07145                     /*%
07146                         $$ = dispatch3(binary, $1, ID2SYM('-'), $3);
07147                     %*/
07148                     }
07149     break;
07150 
07151   case 213:
07152 
07153 /* Line 1806 of yacc.c  */
07154 #line 2088 "parse.y"
07155     {
07156                     /*%%%*/
07157                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '*', (yyvsp[(3) - (3)].node));
07158                     /*%
07159                         $$ = dispatch3(binary, $1, ID2SYM('*'), $3);
07160                     %*/
07161                     }
07162     break;
07163 
07164   case 214:
07165 
07166 /* Line 1806 of yacc.c  */
07167 #line 2096 "parse.y"
07168     {
07169                     /*%%%*/
07170                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '/', (yyvsp[(3) - (3)].node));
07171                     /*%
07172                         $$ = dispatch3(binary, $1, ID2SYM('/'), $3);
07173                     %*/
07174                     }
07175     break;
07176 
07177   case 215:
07178 
07179 /* Line 1806 of yacc.c  */
07180 #line 2104 "parse.y"
07181     {
07182                     /*%%%*/
07183                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '%', (yyvsp[(3) - (3)].node));
07184                     /*%
07185                         $$ = dispatch3(binary, $1, ID2SYM('%'), $3);
07186                     %*/
07187                     }
07188     break;
07189 
07190   case 216:
07191 
07192 /* Line 1806 of yacc.c  */
07193 #line 2112 "parse.y"
07194     {
07195                     /*%%%*/
07196                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tPOW, (yyvsp[(3) - (3)].node));
07197                     /*%
07198                         $$ = dispatch3(binary, $1, ripper_intern("**"), $3);
07199                     %*/
07200                     }
07201     break;
07202 
07203   case 217:
07204 
07205 /* Line 1806 of yacc.c  */
07206 #line 2120 "parse.y"
07207     {
07208                     /*%%%*/
07209                         (yyval.node) = NEW_CALL(call_bin_op((yyvsp[(2) - (4)].node), tPOW, (yyvsp[(4) - (4)].node)), tUMINUS, 0);
07210                     /*%
07211                         $$ = dispatch3(binary, $2, ripper_intern("**"), $4);
07212                         $$ = dispatch2(unary, ripper_intern("-@"), $$);
07213                     %*/
07214                     }
07215     break;
07216 
07217   case 218:
07218 
07219 /* Line 1806 of yacc.c  */
07220 #line 2129 "parse.y"
07221     {
07222                     /*%%%*/
07223                         (yyval.node) = call_uni_op((yyvsp[(2) - (2)].node), tUPLUS);
07224                     /*%
07225                         $$ = dispatch2(unary, ripper_intern("+@"), $2);
07226                     %*/
07227                     }
07228     break;
07229 
07230   case 219:
07231 
07232 /* Line 1806 of yacc.c  */
07233 #line 2137 "parse.y"
07234     {
07235                     /*%%%*/
07236                         (yyval.node) = call_uni_op((yyvsp[(2) - (2)].node), tUMINUS);
07237                     /*%
07238                         $$ = dispatch2(unary, ripper_intern("-@"), $2);
07239                     %*/
07240                     }
07241     break;
07242 
07243   case 220:
07244 
07245 /* Line 1806 of yacc.c  */
07246 #line 2145 "parse.y"
07247     {
07248                     /*%%%*/
07249                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '|', (yyvsp[(3) - (3)].node));
07250                     /*%
07251                         $$ = dispatch3(binary, $1, ID2SYM('|'), $3);
07252                     %*/
07253                     }
07254     break;
07255 
07256   case 221:
07257 
07258 /* Line 1806 of yacc.c  */
07259 #line 2153 "parse.y"
07260     {
07261                     /*%%%*/
07262                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '^', (yyvsp[(3) - (3)].node));
07263                     /*%
07264                         $$ = dispatch3(binary, $1, ID2SYM('^'), $3);
07265                     %*/
07266                     }
07267     break;
07268 
07269   case 222:
07270 
07271 /* Line 1806 of yacc.c  */
07272 #line 2161 "parse.y"
07273     {
07274                     /*%%%*/
07275                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '&', (yyvsp[(3) - (3)].node));
07276                     /*%
07277                         $$ = dispatch3(binary, $1, ID2SYM('&'), $3);
07278                     %*/
07279                     }
07280     break;
07281 
07282   case 223:
07283 
07284 /* Line 1806 of yacc.c  */
07285 #line 2169 "parse.y"
07286     {
07287                     /*%%%*/
07288                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tCMP, (yyvsp[(3) - (3)].node));
07289                     /*%
07290                         $$ = dispatch3(binary, $1, ripper_intern("<=>"), $3);
07291                     %*/
07292                     }
07293     break;
07294 
07295   case 224:
07296 
07297 /* Line 1806 of yacc.c  */
07298 #line 2177 "parse.y"
07299     {
07300                     /*%%%*/
07301                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '>', (yyvsp[(3) - (3)].node));
07302                     /*%
07303                         $$ = dispatch3(binary, $1, ID2SYM('>'), $3);
07304                     %*/
07305                     }
07306     break;
07307 
07308   case 225:
07309 
07310 /* Line 1806 of yacc.c  */
07311 #line 2185 "parse.y"
07312     {
07313                     /*%%%*/
07314                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tGEQ, (yyvsp[(3) - (3)].node));
07315                     /*%
07316                         $$ = dispatch3(binary, $1, ripper_intern(">="), $3);
07317                     %*/
07318                     }
07319     break;
07320 
07321   case 226:
07322 
07323 /* Line 1806 of yacc.c  */
07324 #line 2193 "parse.y"
07325     {
07326                     /*%%%*/
07327                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '<', (yyvsp[(3) - (3)].node));
07328                     /*%
07329                         $$ = dispatch3(binary, $1, ID2SYM('<'), $3);
07330                     %*/
07331                     }
07332     break;
07333 
07334   case 227:
07335 
07336 /* Line 1806 of yacc.c  */
07337 #line 2201 "parse.y"
07338     {
07339                     /*%%%*/
07340                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tLEQ, (yyvsp[(3) - (3)].node));
07341                     /*%
07342                         $$ = dispatch3(binary, $1, ripper_intern("<="), $3);
07343                     %*/
07344                     }
07345     break;
07346 
07347   case 228:
07348 
07349 /* Line 1806 of yacc.c  */
07350 #line 2209 "parse.y"
07351     {
07352                     /*%%%*/
07353                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tEQ, (yyvsp[(3) - (3)].node));
07354                     /*%
07355                         $$ = dispatch3(binary, $1, ripper_intern("=="), $3);
07356                     %*/
07357                     }
07358     break;
07359 
07360   case 229:
07361 
07362 /* Line 1806 of yacc.c  */
07363 #line 2217 "parse.y"
07364     {
07365                     /*%%%*/
07366                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tEQQ, (yyvsp[(3) - (3)].node));
07367                     /*%
07368                         $$ = dispatch3(binary, $1, ripper_intern("==="), $3);
07369                     %*/
07370                     }
07371     break;
07372 
07373   case 230:
07374 
07375 /* Line 1806 of yacc.c  */
07376 #line 2225 "parse.y"
07377     {
07378                     /*%%%*/
07379                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tNEQ, (yyvsp[(3) - (3)].node));
07380                     /*%
07381                         $$ = dispatch3(binary, $1, ripper_intern("!="), $3);
07382                     %*/
07383                     }
07384     break;
07385 
07386   case 231:
07387 
07388 /* Line 1806 of yacc.c  */
07389 #line 2233 "parse.y"
07390     {
07391                     /*%%%*/
07392                         (yyval.node) = match_op((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
07393                         if (nd_type((yyvsp[(1) - (3)].node)) == NODE_LIT && RB_TYPE_P((yyvsp[(1) - (3)].node)->nd_lit, T_REGEXP)) {
07394                             (yyval.node) = reg_named_capture_assign((yyvsp[(1) - (3)].node)->nd_lit, (yyval.node));
07395                         }
07396                     /*%
07397                         $$ = dispatch3(binary, $1, ripper_intern("=~"), $3);
07398                     %*/
07399                     }
07400     break;
07401 
07402   case 232:
07403 
07404 /* Line 1806 of yacc.c  */
07405 #line 2244 "parse.y"
07406     {
07407                     /*%%%*/
07408                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tNMATCH, (yyvsp[(3) - (3)].node));
07409                     /*%
07410                         $$ = dispatch3(binary, $1, ripper_intern("!~"), $3);
07411                     %*/
07412                     }
07413     break;
07414 
07415   case 233:
07416 
07417 /* Line 1806 of yacc.c  */
07418 #line 2252 "parse.y"
07419     {
07420                     /*%%%*/
07421                         (yyval.node) = call_uni_op(cond((yyvsp[(2) - (2)].node)), '!');
07422                     /*%
07423                         $$ = dispatch2(unary, ID2SYM('!'), $2);
07424                     %*/
07425                     }
07426     break;
07427 
07428   case 234:
07429 
07430 /* Line 1806 of yacc.c  */
07431 #line 2260 "parse.y"
07432     {
07433                     /*%%%*/
07434                         (yyval.node) = call_uni_op((yyvsp[(2) - (2)].node), '~');
07435                     /*%
07436                         $$ = dispatch2(unary, ID2SYM('~'), $2);
07437                     %*/
07438                     }
07439     break;
07440 
07441   case 235:
07442 
07443 /* Line 1806 of yacc.c  */
07444 #line 2268 "parse.y"
07445     {
07446                     /*%%%*/
07447                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tLSHFT, (yyvsp[(3) - (3)].node));
07448                     /*%
07449                         $$ = dispatch3(binary, $1, ripper_intern("<<"), $3);
07450                     %*/
07451                     }
07452     break;
07453 
07454   case 236:
07455 
07456 /* Line 1806 of yacc.c  */
07457 #line 2276 "parse.y"
07458     {
07459                     /*%%%*/
07460                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tRSHFT, (yyvsp[(3) - (3)].node));
07461                     /*%
07462                         $$ = dispatch3(binary, $1, ripper_intern(">>"), $3);
07463                     %*/
07464                     }
07465     break;
07466 
07467   case 237:
07468 
07469 /* Line 1806 of yacc.c  */
07470 #line 2284 "parse.y"
07471     {
07472                     /*%%%*/
07473                         (yyval.node) = logop(NODE_AND, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
07474                     /*%
07475                         $$ = dispatch3(binary, $1, ripper_intern("&&"), $3);
07476                     %*/
07477                     }
07478     break;
07479 
07480   case 238:
07481 
07482 /* Line 1806 of yacc.c  */
07483 #line 2292 "parse.y"
07484     {
07485                     /*%%%*/
07486                         (yyval.node) = logop(NODE_OR, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
07487                     /*%
07488                         $$ = dispatch3(binary, $1, ripper_intern("||"), $3);
07489                     %*/
07490                     }
07491     break;
07492 
07493   case 239:
07494 
07495 /* Line 1806 of yacc.c  */
07496 #line 2299 "parse.y"
07497     {in_defined = 1;}
07498     break;
07499 
07500   case 240:
07501 
07502 /* Line 1806 of yacc.c  */
07503 #line 2300 "parse.y"
07504     {
07505                     /*%%%*/
07506                         in_defined = 0;
07507                         (yyval.node) = new_defined((yyvsp[(4) - (4)].node));
07508                     /*%
07509                         in_defined = 0;
07510                         $$ = dispatch1(defined, $4);
07511                     %*/
07512                     }
07513     break;
07514 
07515   case 241:
07516 
07517 /* Line 1806 of yacc.c  */
07518 #line 2310 "parse.y"
07519     {
07520                     /*%%%*/
07521                         value_expr((yyvsp[(1) - (6)].node));
07522                         (yyval.node) = NEW_IF(cond((yyvsp[(1) - (6)].node)), (yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node));
07523                         fixpos((yyval.node), (yyvsp[(1) - (6)].node));
07524                     /*%
07525                         $$ = dispatch3(ifop, $1, $3, $6);
07526                     %*/
07527                     }
07528     break;
07529 
07530   case 242:
07531 
07532 /* Line 1806 of yacc.c  */
07533 #line 2320 "parse.y"
07534     {
07535                         (yyval.node) = (yyvsp[(1) - (1)].node);
07536                     }
07537     break;
07538 
07539   case 243:
07540 
07541 /* Line 1806 of yacc.c  */
07542 #line 2326 "parse.y"
07543     {
07544                     /*%%%*/
07545                         value_expr((yyvsp[(1) - (1)].node));
07546                         (yyval.node) = (yyvsp[(1) - (1)].node);
07547                         if (!(yyval.node)) (yyval.node) = NEW_NIL();
07548                     /*%
07549                         $$ = $1;
07550                     %*/
07551                     }
07552     break;
07553 
07554   case 245:
07555 
07556 /* Line 1806 of yacc.c  */
07557 #line 2339 "parse.y"
07558     {
07559                         (yyval.node) = (yyvsp[(1) - (2)].node);
07560                     }
07561     break;
07562 
07563   case 246:
07564 
07565 /* Line 1806 of yacc.c  */
07566 #line 2343 "parse.y"
07567     {
07568                     /*%%%*/
07569                         (yyval.node) = arg_append((yyvsp[(1) - (4)].node), NEW_HASH((yyvsp[(3) - (4)].node)));
07570                     /*%
07571                         $$ = arg_add_assocs($1, $3);
07572                     %*/
07573                     }
07574     break;
07575 
07576   case 247:
07577 
07578 /* Line 1806 of yacc.c  */
07579 #line 2351 "parse.y"
07580     {
07581                     /*%%%*/
07582                         (yyval.node) = NEW_LIST(NEW_HASH((yyvsp[(1) - (2)].node)));
07583                     /*%
07584                         $$ = arg_add_assocs(arg_new(), $1);
07585                     %*/
07586                     }
07587     break;
07588 
07589   case 248:
07590 
07591 /* Line 1806 of yacc.c  */
07592 #line 2361 "parse.y"
07593     {
07594                     /*%%%*/
07595                         (yyval.node) = (yyvsp[(2) - (3)].node);
07596                     /*%
07597                         $$ = dispatch1(arg_paren, escape_Qundef($2));
07598                     %*/
07599                     }
07600     break;
07601 
07602   case 253:
07603 
07604 /* Line 1806 of yacc.c  */
07605 #line 2377 "parse.y"
07606     {
07607                       (yyval.node) = (yyvsp[(1) - (2)].node);
07608                     }
07609     break;
07610 
07611   case 254:
07612 
07613 /* Line 1806 of yacc.c  */
07614 #line 2381 "parse.y"
07615     {
07616                     /*%%%*/
07617                         (yyval.node) = arg_append((yyvsp[(1) - (4)].node), NEW_HASH((yyvsp[(3) - (4)].node)));
07618                     /*%
07619                         $$ = arg_add_assocs($1, $3);
07620                     %*/
07621                     }
07622     break;
07623 
07624   case 255:
07625 
07626 /* Line 1806 of yacc.c  */
07627 #line 2389 "parse.y"
07628     {
07629                     /*%%%*/
07630                         (yyval.node) = NEW_LIST(NEW_HASH((yyvsp[(1) - (2)].node)));
07631                     /*%
07632                         $$ = arg_add_assocs(arg_new(), $1);
07633                     %*/
07634                     }
07635     break;
07636 
07637   case 256:
07638 
07639 /* Line 1806 of yacc.c  */
07640 #line 2399 "parse.y"
07641     {
07642                     /*%%%*/
07643                         value_expr((yyvsp[(1) - (1)].node));
07644                         (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
07645                     /*%
07646                         $$ = arg_add(arg_new(), $1);
07647                     %*/
07648                     }
07649     break;
07650 
07651   case 257:
07652 
07653 /* Line 1806 of yacc.c  */
07654 #line 2408 "parse.y"
07655     {
07656                     /*%%%*/
07657                         (yyval.node) = arg_blk_pass((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
07658                     /*%
07659                         $$ = arg_add_optblock($1, $2);
07660                     %*/
07661                     }
07662     break;
07663 
07664   case 258:
07665 
07666 /* Line 1806 of yacc.c  */
07667 #line 2416 "parse.y"
07668     {
07669                     /*%%%*/
07670                         (yyval.node) = NEW_LIST(NEW_HASH((yyvsp[(1) - (2)].node)));
07671                         (yyval.node) = arg_blk_pass((yyval.node), (yyvsp[(2) - (2)].node));
07672                     /*%
07673                         $$ = arg_add_assocs(arg_new(), $1);
07674                         $$ = arg_add_optblock($$, $2);
07675                     %*/
07676                     }
07677     break;
07678 
07679   case 259:
07680 
07681 /* Line 1806 of yacc.c  */
07682 #line 2426 "parse.y"
07683     {
07684                     /*%%%*/
07685                         (yyval.node) = arg_append((yyvsp[(1) - (4)].node), NEW_HASH((yyvsp[(3) - (4)].node)));
07686                         (yyval.node) = arg_blk_pass((yyval.node), (yyvsp[(4) - (4)].node));
07687                     /*%
07688                         $$ = arg_add_optblock(arg_add_assocs($1, $3), $4);
07689                     %*/
07690                     }
07691     break;
07692 
07693   case 261:
07694 
07695 /* Line 1806 of yacc.c  */
07696 #line 2443 "parse.y"
07697     {
07698                         (yyval.val) = cmdarg_stack;
07699                         CMDARG_PUSH(1);
07700                     }
07701     break;
07702 
07703   case 262:
07704 
07705 /* Line 1806 of yacc.c  */
07706 #line 2448 "parse.y"
07707     {
07708                         /* CMDARG_POP() */
07709                         cmdarg_stack = (yyvsp[(1) - (2)].val);
07710                         (yyval.node) = (yyvsp[(2) - (2)].node);
07711                     }
07712     break;
07713 
07714   case 263:
07715 
07716 /* Line 1806 of yacc.c  */
07717 #line 2456 "parse.y"
07718     {
07719                     /*%%%*/
07720                         (yyval.node) = NEW_BLOCK_PASS((yyvsp[(2) - (2)].node));
07721                     /*%
07722                         $$ = $2;
07723                     %*/
07724                     }
07725     break;
07726 
07727   case 264:
07728 
07729 /* Line 1806 of yacc.c  */
07730 #line 2466 "parse.y"
07731     {
07732                         (yyval.node) = (yyvsp[(2) - (2)].node);
07733                     }
07734     break;
07735 
07736   case 265:
07737 
07738 /* Line 1806 of yacc.c  */
07739 #line 2470 "parse.y"
07740     {
07741                         (yyval.node) = 0;
07742                     }
07743     break;
07744 
07745   case 266:
07746 
07747 /* Line 1806 of yacc.c  */
07748 #line 2476 "parse.y"
07749     {
07750                     /*%%%*/
07751                         (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
07752                     /*%
07753                         $$ = arg_add(arg_new(), $1);
07754                     %*/
07755                     }
07756     break;
07757 
07758   case 267:
07759 
07760 /* Line 1806 of yacc.c  */
07761 #line 2484 "parse.y"
07762     {
07763                     /*%%%*/
07764                         (yyval.node) = NEW_SPLAT((yyvsp[(2) - (2)].node));
07765                     /*%
07766                         $$ = arg_add_star(arg_new(), $2);
07767                     %*/
07768                     }
07769     break;
07770 
07771   case 268:
07772 
07773 /* Line 1806 of yacc.c  */
07774 #line 2492 "parse.y"
07775     {
07776                     /*%%%*/
07777                         NODE *n1;
07778                         if ((n1 = splat_array((yyvsp[(1) - (3)].node))) != 0) {
07779                             (yyval.node) = list_append(n1, (yyvsp[(3) - (3)].node));
07780                         }
07781                         else {
07782                             (yyval.node) = arg_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
07783                         }
07784                     /*%
07785                         $$ = arg_add($1, $3);
07786                     %*/
07787                     }
07788     break;
07789 
07790   case 269:
07791 
07792 /* Line 1806 of yacc.c  */
07793 #line 2506 "parse.y"
07794     {
07795                     /*%%%*/
07796                         NODE *n1;
07797                         if ((nd_type((yyvsp[(4) - (4)].node)) == NODE_ARRAY) && (n1 = splat_array((yyvsp[(1) - (4)].node))) != 0) {
07798                             (yyval.node) = list_concat(n1, (yyvsp[(4) - (4)].node));
07799                         }
07800                         else {
07801                             (yyval.node) = arg_concat((yyvsp[(1) - (4)].node), (yyvsp[(4) - (4)].node));
07802                         }
07803                     /*%
07804                         $$ = arg_add_star($1, $4);
07805                     %*/
07806                     }
07807     break;
07808 
07809   case 272:
07810 
07811 /* Line 1806 of yacc.c  */
07812 #line 2526 "parse.y"
07813     {
07814                     /*%%%*/
07815                         NODE *n1;
07816                         if ((n1 = splat_array((yyvsp[(1) - (3)].node))) != 0) {
07817                             (yyval.node) = list_append(n1, (yyvsp[(3) - (3)].node));
07818                         }
07819                         else {
07820                             (yyval.node) = arg_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
07821                         }
07822                     /*%
07823                         $$ = mrhs_add(args2mrhs($1), $3);
07824                     %*/
07825                     }
07826     break;
07827 
07828   case 273:
07829 
07830 /* Line 1806 of yacc.c  */
07831 #line 2540 "parse.y"
07832     {
07833                     /*%%%*/
07834                         NODE *n1;
07835                         if (nd_type((yyvsp[(4) - (4)].node)) == NODE_ARRAY &&
07836                             (n1 = splat_array((yyvsp[(1) - (4)].node))) != 0) {
07837                             (yyval.node) = list_concat(n1, (yyvsp[(4) - (4)].node));
07838                         }
07839                         else {
07840                             (yyval.node) = arg_concat((yyvsp[(1) - (4)].node), (yyvsp[(4) - (4)].node));
07841                         }
07842                     /*%
07843                         $$ = mrhs_add_star(args2mrhs($1), $4);
07844                     %*/
07845                     }
07846     break;
07847 
07848   case 274:
07849 
07850 /* Line 1806 of yacc.c  */
07851 #line 2555 "parse.y"
07852     {
07853                     /*%%%*/
07854                         (yyval.node) = NEW_SPLAT((yyvsp[(2) - (2)].node));
07855                     /*%
07856                         $$ = mrhs_add_star(mrhs_new(), $2);
07857                     %*/
07858                     }
07859     break;
07860 
07861   case 285:
07862 
07863 /* Line 1806 of yacc.c  */
07864 #line 2575 "parse.y"
07865     {
07866                     /*%%%*/
07867                         (yyval.node) = NEW_FCALL((yyvsp[(1) - (1)].id), 0);
07868                     /*%
07869                         $$ = method_arg(dispatch1(fcall, $1), arg_new());
07870                     %*/
07871                     }
07872     break;
07873 
07874   case 286:
07875 
07876 /* Line 1806 of yacc.c  */
07877 #line 2583 "parse.y"
07878     {
07879                         (yyvsp[(1) - (1)].val) = cmdarg_stack;
07880                         cmdarg_stack = 0;
07881                     /*%%%*/
07882                         (yyval.num) = ruby_sourceline;
07883                     /*%
07884                     %*/
07885                     }
07886     break;
07887 
07888   case 287:
07889 
07890 /* Line 1806 of yacc.c  */
07891 #line 2593 "parse.y"
07892     {
07893                         cmdarg_stack = (yyvsp[(1) - (4)].val);
07894                     /*%%%*/
07895                         if ((yyvsp[(3) - (4)].node) == NULL) {
07896                             (yyval.node) = NEW_NIL();
07897                         }
07898                         else {
07899                             if (nd_type((yyvsp[(3) - (4)].node)) == NODE_RESCUE ||
07900                                 nd_type((yyvsp[(3) - (4)].node)) == NODE_ENSURE)
07901                                 nd_set_line((yyvsp[(3) - (4)].node), (yyvsp[(2) - (4)].num));
07902                             (yyval.node) = NEW_BEGIN((yyvsp[(3) - (4)].node));
07903                         }
07904                         nd_set_line((yyval.node), (yyvsp[(2) - (4)].num));
07905                     /*%
07906                         $$ = dispatch1(begin, $3);
07907                     %*/
07908                     }
07909     break;
07910 
07911   case 288:
07912 
07913 /* Line 1806 of yacc.c  */
07914 #line 2610 "parse.y"
07915     {lex_state = EXPR_ENDARG;}
07916     break;
07917 
07918   case 289:
07919 
07920 /* Line 1806 of yacc.c  */
07921 #line 2611 "parse.y"
07922     {
07923                     /*%%%*/
07924                         (yyval.node) = 0;
07925                     /*%
07926                         $$ = dispatch1(paren, 0);
07927                     %*/
07928                     }
07929     break;
07930 
07931   case 290:
07932 
07933 /* Line 1806 of yacc.c  */
07934 #line 2619 "parse.y"
07935     {
07936                         (yyvsp[(1) - (1)].val) = cmdarg_stack;
07937                         cmdarg_stack = 0;
07938                     }
07939     break;
07940 
07941   case 291:
07942 
07943 /* Line 1806 of yacc.c  */
07944 #line 2623 "parse.y"
07945     {lex_state = EXPR_ENDARG;}
07946     break;
07947 
07948   case 292:
07949 
07950 /* Line 1806 of yacc.c  */
07951 #line 2624 "parse.y"
07952     {
07953                         cmdarg_stack = (yyvsp[(1) - (5)].val);
07954                     /*%%%*/
07955                         (yyval.node) = (yyvsp[(3) - (5)].node);
07956                     /*%
07957                         $$ = dispatch1(paren, $3);
07958                     %*/
07959                     }
07960     break;
07961 
07962   case 293:
07963 
07964 /* Line 1806 of yacc.c  */
07965 #line 2633 "parse.y"
07966     {
07967                     /*%%%*/
07968                         (yyval.node) = (yyvsp[(2) - (3)].node);
07969                     /*%
07970                         $$ = dispatch1(paren, $2);
07971                     %*/
07972                     }
07973     break;
07974 
07975   case 294:
07976 
07977 /* Line 1806 of yacc.c  */
07978 #line 2641 "parse.y"
07979     {
07980                     /*%%%*/
07981                         (yyval.node) = NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
07982                     /*%
07983                         $$ = dispatch2(const_path_ref, $1, $3);
07984                     %*/
07985                     }
07986     break;
07987 
07988   case 295:
07989 
07990 /* Line 1806 of yacc.c  */
07991 #line 2649 "parse.y"
07992     {
07993                     /*%%%*/
07994                         (yyval.node) = NEW_COLON3((yyvsp[(2) - (2)].id));
07995                     /*%
07996                         $$ = dispatch1(top_const_ref, $2);
07997                     %*/
07998                     }
07999     break;
08000 
08001   case 296:
08002 
08003 /* Line 1806 of yacc.c  */
08004 #line 2657 "parse.y"
08005     {
08006                     /*%%%*/
08007                         if ((yyvsp[(2) - (3)].node) == 0) {
08008                             (yyval.node) = NEW_ZARRAY(); /* zero length array*/
08009                         }
08010                         else {
08011                             (yyval.node) = (yyvsp[(2) - (3)].node);
08012                         }
08013                     /*%
08014                         $$ = dispatch1(array, escape_Qundef($2));
08015                     %*/
08016                     }
08017     break;
08018 
08019   case 297:
08020 
08021 /* Line 1806 of yacc.c  */
08022 #line 2670 "parse.y"
08023     {
08024                     /*%%%*/
08025                         (yyval.node) = NEW_HASH((yyvsp[(2) - (3)].node));
08026                     /*%
08027                         $$ = dispatch1(hash, escape_Qundef($2));
08028                     %*/
08029                     }
08030     break;
08031 
08032   case 298:
08033 
08034 /* Line 1806 of yacc.c  */
08035 #line 2678 "parse.y"
08036     {
08037                     /*%%%*/
08038                         (yyval.node) = NEW_RETURN(0);
08039                     /*%
08040                         $$ = dispatch0(return0);
08041                     %*/
08042                     }
08043     break;
08044 
08045   case 299:
08046 
08047 /* Line 1806 of yacc.c  */
08048 #line 2686 "parse.y"
08049     {
08050                     /*%%%*/
08051                         (yyval.node) = new_yield((yyvsp[(3) - (4)].node));
08052                     /*%
08053                         $$ = dispatch1(yield, dispatch1(paren, $3));
08054                     %*/
08055                     }
08056     break;
08057 
08058   case 300:
08059 
08060 /* Line 1806 of yacc.c  */
08061 #line 2694 "parse.y"
08062     {
08063                     /*%%%*/
08064                         (yyval.node) = NEW_YIELD(0);
08065                     /*%
08066                         $$ = dispatch1(yield, dispatch1(paren, arg_new()));
08067                     %*/
08068                     }
08069     break;
08070 
08071   case 301:
08072 
08073 /* Line 1806 of yacc.c  */
08074 #line 2702 "parse.y"
08075     {
08076                     /*%%%*/
08077                         (yyval.node) = NEW_YIELD(0);
08078                     /*%
08079                         $$ = dispatch0(yield0);
08080                     %*/
08081                     }
08082     break;
08083 
08084   case 302:
08085 
08086 /* Line 1806 of yacc.c  */
08087 #line 2709 "parse.y"
08088     {in_defined = 1;}
08089     break;
08090 
08091   case 303:
08092 
08093 /* Line 1806 of yacc.c  */
08094 #line 2710 "parse.y"
08095     {
08096                     /*%%%*/
08097                         in_defined = 0;
08098                         (yyval.node) = new_defined((yyvsp[(5) - (6)].node));
08099                     /*%
08100                         in_defined = 0;
08101                         $$ = dispatch1(defined, $5);
08102                     %*/
08103                     }
08104     break;
08105 
08106   case 304:
08107 
08108 /* Line 1806 of yacc.c  */
08109 #line 2720 "parse.y"
08110     {
08111                     /*%%%*/
08112                         (yyval.node) = call_uni_op(cond((yyvsp[(3) - (4)].node)), '!');
08113                     /*%
08114                         $$ = dispatch2(unary, ripper_intern("not"), $3);
08115                     %*/
08116                     }
08117     break;
08118 
08119   case 305:
08120 
08121 /* Line 1806 of yacc.c  */
08122 #line 2728 "parse.y"
08123     {
08124                     /*%%%*/
08125                         (yyval.node) = call_uni_op(cond(NEW_NIL()), '!');
08126                     /*%
08127                         $$ = dispatch2(unary, ripper_intern("not"), Qnil);
08128                     %*/
08129                     }
08130     break;
08131 
08132   case 306:
08133 
08134 /* Line 1806 of yacc.c  */
08135 #line 2736 "parse.y"
08136     {
08137                     /*%%%*/
08138                         (yyvsp[(2) - (2)].node)->nd_iter = (yyvsp[(1) - (2)].node);
08139                         (yyval.node) = (yyvsp[(2) - (2)].node);
08140                     /*%
08141                         $$ = method_arg(dispatch1(fcall, $1), arg_new());
08142                         $$ = method_add_block($$, $2);
08143                     %*/
08144                     }
08145     break;
08146 
08147   case 308:
08148 
08149 /* Line 1806 of yacc.c  */
08150 #line 2747 "parse.y"
08151     {
08152                     /*%%%*/
08153                         block_dup_check((yyvsp[(1) - (2)].node)->nd_args, (yyvsp[(2) - (2)].node));
08154                         (yyvsp[(2) - (2)].node)->nd_iter = (yyvsp[(1) - (2)].node);
08155                         (yyval.node) = (yyvsp[(2) - (2)].node);
08156                     /*%
08157                         $$ = method_add_block($1, $2);
08158                     %*/
08159                     }
08160     break;
08161 
08162   case 309:
08163 
08164 /* Line 1806 of yacc.c  */
08165 #line 2757 "parse.y"
08166     {
08167                         (yyval.node) = (yyvsp[(2) - (2)].node);
08168                     }
08169     break;
08170 
08171   case 310:
08172 
08173 /* Line 1806 of yacc.c  */
08174 #line 2764 "parse.y"
08175     {
08176                     /*%%%*/
08177                         (yyval.node) = NEW_IF(cond((yyvsp[(2) - (6)].node)), (yyvsp[(4) - (6)].node), (yyvsp[(5) - (6)].node));
08178                         fixpos((yyval.node), (yyvsp[(2) - (6)].node));
08179                     /*%
08180                         $$ = dispatch3(if, $2, $4, escape_Qundef($5));
08181                     %*/
08182                     }
08183     break;
08184 
08185   case 311:
08186 
08187 /* Line 1806 of yacc.c  */
08188 #line 2776 "parse.y"
08189     {
08190                     /*%%%*/
08191                         (yyval.node) = NEW_UNLESS(cond((yyvsp[(2) - (6)].node)), (yyvsp[(4) - (6)].node), (yyvsp[(5) - (6)].node));
08192                         fixpos((yyval.node), (yyvsp[(2) - (6)].node));
08193                     /*%
08194                         $$ = dispatch3(unless, $2, $4, escape_Qundef($5));
08195                     %*/
08196                     }
08197     break;
08198 
08199   case 312:
08200 
08201 /* Line 1806 of yacc.c  */
08202 #line 2784 "parse.y"
08203     {COND_PUSH(1);}
08204     break;
08205 
08206   case 313:
08207 
08208 /* Line 1806 of yacc.c  */
08209 #line 2784 "parse.y"
08210     {COND_POP();}
08211     break;
08212 
08213   case 314:
08214 
08215 /* Line 1806 of yacc.c  */
08216 #line 2787 "parse.y"
08217     {
08218                     /*%%%*/
08219                         (yyval.node) = NEW_WHILE(cond((yyvsp[(3) - (7)].node)), (yyvsp[(6) - (7)].node), 1);
08220                         fixpos((yyval.node), (yyvsp[(3) - (7)].node));
08221                     /*%
08222                         $$ = dispatch2(while, $3, $6);
08223                     %*/
08224                     }
08225     break;
08226 
08227   case 315:
08228 
08229 /* Line 1806 of yacc.c  */
08230 #line 2795 "parse.y"
08231     {COND_PUSH(1);}
08232     break;
08233 
08234   case 316:
08235 
08236 /* Line 1806 of yacc.c  */
08237 #line 2795 "parse.y"
08238     {COND_POP();}
08239     break;
08240 
08241   case 317:
08242 
08243 /* Line 1806 of yacc.c  */
08244 #line 2798 "parse.y"
08245     {
08246                     /*%%%*/
08247                         (yyval.node) = NEW_UNTIL(cond((yyvsp[(3) - (7)].node)), (yyvsp[(6) - (7)].node), 1);
08248                         fixpos((yyval.node), (yyvsp[(3) - (7)].node));
08249                     /*%
08250                         $$ = dispatch2(until, $3, $6);
08251                     %*/
08252                     }
08253     break;
08254 
08255   case 318:
08256 
08257 /* Line 1806 of yacc.c  */
08258 #line 2809 "parse.y"
08259     {
08260                     /*%%%*/
08261                         (yyval.node) = NEW_CASE((yyvsp[(2) - (5)].node), (yyvsp[(4) - (5)].node));
08262                         fixpos((yyval.node), (yyvsp[(2) - (5)].node));
08263                     /*%
08264                         $$ = dispatch2(case, $2, $4);
08265                     %*/
08266                     }
08267     break;
08268 
08269   case 319:
08270 
08271 /* Line 1806 of yacc.c  */
08272 #line 2818 "parse.y"
08273     {
08274                     /*%%%*/
08275                         (yyval.node) = NEW_CASE(0, (yyvsp[(3) - (4)].node));
08276                     /*%
08277                         $$ = dispatch2(case, Qnil, $3);
08278                     %*/
08279                     }
08280     break;
08281 
08282   case 320:
08283 
08284 /* Line 1806 of yacc.c  */
08285 #line 2826 "parse.y"
08286     {COND_PUSH(1);}
08287     break;
08288 
08289   case 321:
08290 
08291 /* Line 1806 of yacc.c  */
08292 #line 2828 "parse.y"
08293     {COND_POP();}
08294     break;
08295 
08296   case 322:
08297 
08298 /* Line 1806 of yacc.c  */
08299 #line 2831 "parse.y"
08300     {
08301                     /*%%%*/
08302                         /*
08303                          *  for a, b, c in e
08304                          *  #=>
08305                          *  e.each{|*x| a, b, c = x
08306                          *
08307                          *  for a in e
08308                          *  #=>
08309                          *  e.each{|x| a, = x}
08310                          */
08311                         ID id = internal_id();
08312                         ID *tbl = ALLOC_N(ID, 2);
08313                         NODE *m = NEW_ARGS_AUX(0, 0);
08314                         NODE *args, *scope;
08315 
08316                         if (nd_type((yyvsp[(2) - (9)].node)) == NODE_MASGN) {
08317                             /* if args.length == 1 && args[0].kind_of?(Array)
08318                              *   args = args[0]
08319                              * end
08320                              */
08321                             NODE *one = NEW_LIST(NEW_LIT(INT2FIX(1)));
08322                             NODE *zero = NEW_LIST(NEW_LIT(INT2FIX(0)));
08323                             m->nd_next = block_append(
08324                                 NEW_IF(
08325                                     NEW_NODE(NODE_AND,
08326                                              NEW_CALL(NEW_CALL(NEW_DVAR(id), idLength, 0),
08327                                                       idEq, one),
08328                                              NEW_CALL(NEW_CALL(NEW_DVAR(id), idAREF, zero),
08329                                                       rb_intern("kind_of?"), NEW_LIST(NEW_LIT(rb_cArray))),
08330                                              0),
08331                                     NEW_DASGN_CURR(id,
08332                                                    NEW_CALL(NEW_DVAR(id), idAREF, zero)),
08333                                     0),
08334                                 node_assign((yyvsp[(2) - (9)].node), NEW_DVAR(id)));
08335 
08336                             args = new_args(m, 0, id, 0, new_args_tail(0, 0, 0));
08337                         }
08338                         else {
08339                             if (nd_type((yyvsp[(2) - (9)].node)) == NODE_LASGN ||
08340                                 nd_type((yyvsp[(2) - (9)].node)) == NODE_DASGN ||
08341                                 nd_type((yyvsp[(2) - (9)].node)) == NODE_DASGN_CURR) {
08342                                 (yyvsp[(2) - (9)].node)->nd_value = NEW_DVAR(id);
08343                                 m->nd_plen = 1;
08344                                 m->nd_next = (yyvsp[(2) - (9)].node);
08345                                 args = new_args(m, 0, 0, 0, new_args_tail(0, 0, 0));
08346                             }
08347                             else {
08348                                 m->nd_next = node_assign(NEW_MASGN(NEW_LIST((yyvsp[(2) - (9)].node)), 0), NEW_DVAR(id));
08349                                 args = new_args(m, 0, id, 0, new_args_tail(0, 0, 0));
08350                             }
08351                         }
08352                         scope = NEW_NODE(NODE_SCOPE, tbl, (yyvsp[(8) - (9)].node), args);
08353                         tbl[0] = 1; tbl[1] = id;
08354                         (yyval.node) = NEW_FOR(0, (yyvsp[(5) - (9)].node), scope);
08355                         fixpos((yyval.node), (yyvsp[(2) - (9)].node));
08356                     /*%
08357                         $$ = dispatch3(for, $2, $5, $8);
08358                     %*/
08359                     }
08360     break;
08361 
08362   case 323:
08363 
08364 /* Line 1806 of yacc.c  */
08365 #line 2892 "parse.y"
08366     {
08367                         if (in_def || in_single)
08368                             yyerror("class definition in method body");
08369                         local_push(0);
08370                     /*%%%*/
08371                         (yyval.num) = ruby_sourceline;
08372                     /*%
08373                     %*/
08374                     }
08375     break;
08376 
08377   case 324:
08378 
08379 /* Line 1806 of yacc.c  */
08380 #line 2903 "parse.y"
08381     {
08382                     /*%%%*/
08383                         (yyval.node) = NEW_CLASS((yyvsp[(2) - (6)].node), (yyvsp[(5) - (6)].node), (yyvsp[(3) - (6)].node));
08384                         nd_set_line((yyval.node), (yyvsp[(4) - (6)].num));
08385                     /*%
08386                         $$ = dispatch3(class, $2, $3, $5);
08387                     %*/
08388                         local_pop();
08389                     }
08390     break;
08391 
08392   case 325:
08393 
08394 /* Line 1806 of yacc.c  */
08395 #line 2913 "parse.y"
08396     {
08397                         (yyval.num) = in_def;
08398                         in_def = 0;
08399                     }
08400     break;
08401 
08402   case 326:
08403 
08404 /* Line 1806 of yacc.c  */
08405 #line 2918 "parse.y"
08406     {
08407                         (yyval.num) = in_single;
08408                         in_single = 0;
08409                         local_push(0);
08410                     }
08411     break;
08412 
08413   case 327:
08414 
08415 /* Line 1806 of yacc.c  */
08416 #line 2925 "parse.y"
08417     {
08418                     /*%%%*/
08419                         (yyval.node) = NEW_SCLASS((yyvsp[(3) - (8)].node), (yyvsp[(7) - (8)].node));
08420                         fixpos((yyval.node), (yyvsp[(3) - (8)].node));
08421                     /*%
08422                         $$ = dispatch2(sclass, $3, $7);
08423                     %*/
08424                         local_pop();
08425                         in_def = (yyvsp[(4) - (8)].num);
08426                         in_single = (yyvsp[(6) - (8)].num);
08427                     }
08428     break;
08429 
08430   case 328:
08431 
08432 /* Line 1806 of yacc.c  */
08433 #line 2937 "parse.y"
08434     {
08435                         if (in_def || in_single)
08436                             yyerror("module definition in method body");
08437                         local_push(0);
08438                     /*%%%*/
08439                         (yyval.num) = ruby_sourceline;
08440                     /*%
08441                     %*/
08442                     }
08443     break;
08444 
08445   case 329:
08446 
08447 /* Line 1806 of yacc.c  */
08448 #line 2948 "parse.y"
08449     {
08450                     /*%%%*/
08451                         (yyval.node) = NEW_MODULE((yyvsp[(2) - (5)].node), (yyvsp[(4) - (5)].node));
08452                         nd_set_line((yyval.node), (yyvsp[(3) - (5)].num));
08453                     /*%
08454                         $$ = dispatch2(module, $2, $4);
08455                     %*/
08456                         local_pop();
08457                     }
08458     break;
08459 
08460   case 330:
08461 
08462 /* Line 1806 of yacc.c  */
08463 #line 2958 "parse.y"
08464     {
08465                         (yyval.id) = cur_mid;
08466                         cur_mid = (yyvsp[(2) - (2)].id);
08467                         in_def++;
08468                         local_push(0);
08469                     }
08470     break;
08471 
08472   case 331:
08473 
08474 /* Line 1806 of yacc.c  */
08475 #line 2967 "parse.y"
08476     {
08477                     /*%%%*/
08478                         NODE *body = remove_begin((yyvsp[(5) - (6)].node));
08479                         reduce_nodes(&body);
08480                         (yyval.node) = NEW_DEFN((yyvsp[(2) - (6)].id), (yyvsp[(4) - (6)].node), body, NOEX_PRIVATE);
08481                         nd_set_line((yyval.node), (yyvsp[(1) - (6)].num));
08482                     /*%
08483                         $$ = dispatch3(def, $2, $4, $5);
08484                     %*/
08485                         local_pop();
08486                         in_def--;
08487                         cur_mid = (yyvsp[(3) - (6)].id);
08488                     }
08489     break;
08490 
08491   case 332:
08492 
08493 /* Line 1806 of yacc.c  */
08494 #line 2980 "parse.y"
08495     {lex_state = EXPR_FNAME;}
08496     break;
08497 
08498   case 333:
08499 
08500 /* Line 1806 of yacc.c  */
08501 #line 2981 "parse.y"
08502     {
08503                         in_single++;
08504                         lex_state = EXPR_ENDFN; /* force for args */
08505                         local_push(0);
08506                     }
08507     break;
08508 
08509   case 334:
08510 
08511 /* Line 1806 of yacc.c  */
08512 #line 2989 "parse.y"
08513     {
08514                     /*%%%*/
08515                         NODE *body = remove_begin((yyvsp[(8) - (9)].node));
08516                         reduce_nodes(&body);
08517                         (yyval.node) = NEW_DEFS((yyvsp[(2) - (9)].node), (yyvsp[(5) - (9)].id), (yyvsp[(7) - (9)].node), body);
08518                         nd_set_line((yyval.node), (yyvsp[(1) - (9)].num));
08519                     /*%
08520                         $$ = dispatch5(defs, $2, $3, $5, $7, $8);
08521                     %*/
08522                         local_pop();
08523                         in_single--;
08524                     }
08525     break;
08526 
08527   case 335:
08528 
08529 /* Line 1806 of yacc.c  */
08530 #line 3002 "parse.y"
08531     {
08532                     /*%%%*/
08533                         (yyval.node) = NEW_BREAK(0);
08534                     /*%
08535                         $$ = dispatch1(break, arg_new());
08536                     %*/
08537                     }
08538     break;
08539 
08540   case 336:
08541 
08542 /* Line 1806 of yacc.c  */
08543 #line 3010 "parse.y"
08544     {
08545                     /*%%%*/
08546                         (yyval.node) = NEW_NEXT(0);
08547                     /*%
08548                         $$ = dispatch1(next, arg_new());
08549                     %*/
08550                     }
08551     break;
08552 
08553   case 337:
08554 
08555 /* Line 1806 of yacc.c  */
08556 #line 3018 "parse.y"
08557     {
08558                     /*%%%*/
08559                         (yyval.node) = NEW_REDO();
08560                     /*%
08561                         $$ = dispatch0(redo);
08562                     %*/
08563                     }
08564     break;
08565 
08566   case 338:
08567 
08568 /* Line 1806 of yacc.c  */
08569 #line 3026 "parse.y"
08570     {
08571                     /*%%%*/
08572                         (yyval.node) = NEW_RETRY();
08573                     /*%
08574                         $$ = dispatch0(retry);
08575                     %*/
08576                     }
08577     break;
08578 
08579   case 339:
08580 
08581 /* Line 1806 of yacc.c  */
08582 #line 3036 "parse.y"
08583     {
08584                     /*%%%*/
08585                         value_expr((yyvsp[(1) - (1)].node));
08586                         (yyval.node) = (yyvsp[(1) - (1)].node);
08587                         if (!(yyval.node)) (yyval.node) = NEW_NIL();
08588                     /*%
08589                         $$ = $1;
08590                     %*/
08591                     }
08592     break;
08593 
08594   case 340:
08595 
08596 /* Line 1806 of yacc.c  */
08597 #line 3048 "parse.y"
08598     {
08599                         token_info_push("begin");
08600                     }
08601     break;
08602 
08603   case 341:
08604 
08605 /* Line 1806 of yacc.c  */
08606 #line 3054 "parse.y"
08607     {
08608                         token_info_push("if");
08609                     }
08610     break;
08611 
08612   case 342:
08613 
08614 /* Line 1806 of yacc.c  */
08615 #line 3060 "parse.y"
08616     {
08617                         token_info_push("unless");
08618                     }
08619     break;
08620 
08621   case 343:
08622 
08623 /* Line 1806 of yacc.c  */
08624 #line 3066 "parse.y"
08625     {
08626                         token_info_push("while");
08627                     }
08628     break;
08629 
08630   case 344:
08631 
08632 /* Line 1806 of yacc.c  */
08633 #line 3072 "parse.y"
08634     {
08635                         token_info_push("until");
08636                     }
08637     break;
08638 
08639   case 345:
08640 
08641 /* Line 1806 of yacc.c  */
08642 #line 3078 "parse.y"
08643     {
08644                         token_info_push("case");
08645                     }
08646     break;
08647 
08648   case 346:
08649 
08650 /* Line 1806 of yacc.c  */
08651 #line 3084 "parse.y"
08652     {
08653                         token_info_push("for");
08654                     }
08655     break;
08656 
08657   case 347:
08658 
08659 /* Line 1806 of yacc.c  */
08660 #line 3090 "parse.y"
08661     {
08662                         token_info_push("class");
08663                     }
08664     break;
08665 
08666   case 348:
08667 
08668 /* Line 1806 of yacc.c  */
08669 #line 3096 "parse.y"
08670     {
08671                         token_info_push("module");
08672                     }
08673     break;
08674 
08675   case 349:
08676 
08677 /* Line 1806 of yacc.c  */
08678 #line 3102 "parse.y"
08679     {
08680                         token_info_push("def");
08681                     /*%%%*/
08682                         (yyval.num) = ruby_sourceline;
08683                     /*%
08684                     %*/
08685                     }
08686     break;
08687 
08688   case 350:
08689 
08690 /* Line 1806 of yacc.c  */
08691 #line 3112 "parse.y"
08692     {
08693                         token_info_pop("end");
08694                     }
08695     break;
08696 
08697   case 357:
08698 
08699 /* Line 1806 of yacc.c  */
08700 #line 3142 "parse.y"
08701     {
08702                     /*%%%*/
08703                         (yyval.node) = NEW_IF(cond((yyvsp[(2) - (5)].node)), (yyvsp[(4) - (5)].node), (yyvsp[(5) - (5)].node));
08704                         fixpos((yyval.node), (yyvsp[(2) - (5)].node));
08705                     /*%
08706                         $$ = dispatch3(elsif, $2, $4, escape_Qundef($5));
08707                     %*/
08708                     }
08709     break;
08710 
08711   case 359:
08712 
08713 /* Line 1806 of yacc.c  */
08714 #line 3154 "parse.y"
08715     {
08716                     /*%%%*/
08717                         (yyval.node) = (yyvsp[(2) - (2)].node);
08718                     /*%
08719                         $$ = dispatch1(else, $2);
08720                     %*/
08721                     }
08722     break;
08723 
08724   case 362:
08725 
08726 /* Line 1806 of yacc.c  */
08727 #line 3168 "parse.y"
08728     {
08729                         (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
08730                     /*%%%*/
08731                     /*%
08732                         $$ = dispatch1(mlhs_paren, $$);
08733                     %*/
08734                     }
08735     break;
08736 
08737   case 363:
08738 
08739 /* Line 1806 of yacc.c  */
08740 #line 3176 "parse.y"
08741     {
08742                     /*%%%*/
08743                         (yyval.node) = (yyvsp[(2) - (3)].node);
08744                     /*%
08745                         $$ = dispatch1(mlhs_paren, $2);
08746                     %*/
08747                     }
08748     break;
08749 
08750   case 364:
08751 
08752 /* Line 1806 of yacc.c  */
08753 #line 3186 "parse.y"
08754     {
08755                     /*%%%*/
08756                         (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
08757                     /*%
08758                         $$ = mlhs_add(mlhs_new(), $1);
08759                     %*/
08760                     }
08761     break;
08762 
08763   case 365:
08764 
08765 /* Line 1806 of yacc.c  */
08766 #line 3194 "parse.y"
08767     {
08768                     /*%%%*/
08769                         (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
08770                     /*%
08771                         $$ = mlhs_add($1, $3);
08772                     %*/
08773                     }
08774     break;
08775 
08776   case 366:
08777 
08778 /* Line 1806 of yacc.c  */
08779 #line 3204 "parse.y"
08780     {
08781                     /*%%%*/
08782                         (yyval.node) = NEW_MASGN((yyvsp[(1) - (1)].node), 0);
08783                     /*%
08784                         $$ = $1;
08785                     %*/
08786                     }
08787     break;
08788 
08789   case 367:
08790 
08791 /* Line 1806 of yacc.c  */
08792 #line 3212 "parse.y"
08793     {
08794                         (yyval.node) = assignable((yyvsp[(4) - (4)].id), 0);
08795                     /*%%%*/
08796                         (yyval.node) = NEW_MASGN((yyvsp[(1) - (4)].node), (yyval.node));
08797                     /*%
08798                         $$ = mlhs_add_star($1, $$);
08799                     %*/
08800                     }
08801     break;
08802 
08803   case 368:
08804 
08805 /* Line 1806 of yacc.c  */
08806 #line 3221 "parse.y"
08807     {
08808                         (yyval.node) = assignable((yyvsp[(4) - (6)].id), 0);
08809                     /*%%%*/
08810                         (yyval.node) = NEW_MASGN((yyvsp[(1) - (6)].node), NEW_POSTARG((yyval.node), (yyvsp[(6) - (6)].node)));
08811                     /*%
08812                         $$ = mlhs_add_star($1, $$);
08813                     %*/
08814                     }
08815     break;
08816 
08817   case 369:
08818 
08819 /* Line 1806 of yacc.c  */
08820 #line 3230 "parse.y"
08821     {
08822                     /*%%%*/
08823                         (yyval.node) = NEW_MASGN((yyvsp[(1) - (3)].node), -1);
08824                     /*%
08825                         $$ = mlhs_add_star($1, Qnil);
08826                     %*/
08827                     }
08828     break;
08829 
08830   case 370:
08831 
08832 /* Line 1806 of yacc.c  */
08833 #line 3238 "parse.y"
08834     {
08835                     /*%%%*/
08836                         (yyval.node) = NEW_MASGN((yyvsp[(1) - (5)].node), NEW_POSTARG(-1, (yyvsp[(5) - (5)].node)));
08837                     /*%
08838                         $$ = mlhs_add_star($1, $5);
08839                     %*/
08840                     }
08841     break;
08842 
08843   case 371:
08844 
08845 /* Line 1806 of yacc.c  */
08846 #line 3246 "parse.y"
08847     {
08848                         (yyval.node) = assignable((yyvsp[(2) - (2)].id), 0);
08849                     /*%%%*/
08850                         (yyval.node) = NEW_MASGN(0, (yyval.node));
08851                     /*%
08852                         $$ = mlhs_add_star(mlhs_new(), $$);
08853                     %*/
08854                     }
08855     break;
08856 
08857   case 372:
08858 
08859 /* Line 1806 of yacc.c  */
08860 #line 3255 "parse.y"
08861     {
08862                         (yyval.node) = assignable((yyvsp[(2) - (4)].id), 0);
08863                     /*%%%*/
08864                         (yyval.node) = NEW_MASGN(0, NEW_POSTARG((yyval.node), (yyvsp[(4) - (4)].node)));
08865                     /*%
08866                       #if 0
08867                       TODO: Check me
08868                       #endif
08869                         $$ = mlhs_add_star($$, $4);
08870                     %*/
08871                     }
08872     break;
08873 
08874   case 373:
08875 
08876 /* Line 1806 of yacc.c  */
08877 #line 3267 "parse.y"
08878     {
08879                     /*%%%*/
08880                         (yyval.node) = NEW_MASGN(0, -1);
08881                     /*%
08882                         $$ = mlhs_add_star(mlhs_new(), Qnil);
08883                     %*/
08884                     }
08885     break;
08886 
08887   case 374:
08888 
08889 /* Line 1806 of yacc.c  */
08890 #line 3275 "parse.y"
08891     {
08892                     /*%%%*/
08893                         (yyval.node) = NEW_MASGN(0, NEW_POSTARG(-1, (yyvsp[(3) - (3)].node)));
08894                     /*%
08895                         $$ = mlhs_add_star(mlhs_new(), Qnil);
08896                     %*/
08897                     }
08898     break;
08899 
08900   case 375:
08901 
08902 /* Line 1806 of yacc.c  */
08903 #line 3286 "parse.y"
08904     {
08905                         (yyval.node) = new_args_tail((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].id));
08906                     }
08907     break;
08908 
08909   case 376:
08910 
08911 /* Line 1806 of yacc.c  */
08912 #line 3290 "parse.y"
08913     {
08914                         (yyval.node) = new_args_tail((yyvsp[(1) - (2)].node), Qnone, (yyvsp[(2) - (2)].id));
08915                     }
08916     break;
08917 
08918   case 377:
08919 
08920 /* Line 1806 of yacc.c  */
08921 #line 3294 "parse.y"
08922     {
08923                         (yyval.node) = new_args_tail(Qnone, (yyvsp[(1) - (2)].id), (yyvsp[(2) - (2)].id));
08924                     }
08925     break;
08926 
08927   case 378:
08928 
08929 /* Line 1806 of yacc.c  */
08930 #line 3298 "parse.y"
08931     {
08932                         (yyval.node) = new_args_tail(Qnone, Qnone, (yyvsp[(1) - (1)].id));
08933                     }
08934     break;
08935 
08936   case 379:
08937 
08938 /* Line 1806 of yacc.c  */
08939 #line 3304 "parse.y"
08940     {
08941                         (yyval.node) = (yyvsp[(2) - (2)].node);
08942                     }
08943     break;
08944 
08945   case 380:
08946 
08947 /* Line 1806 of yacc.c  */
08948 #line 3308 "parse.y"
08949     {
08950                         (yyval.node) = new_args_tail(Qnone, Qnone, Qnone);
08951                     }
08952     break;
08953 
08954   case 381:
08955 
08956 /* Line 1806 of yacc.c  */
08957 #line 3314 "parse.y"
08958     {
08959                         (yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), (yyvsp[(5) - (6)].id), Qnone, (yyvsp[(6) - (6)].node));
08960                     }
08961     break;
08962 
08963   case 382:
08964 
08965 /* Line 1806 of yacc.c  */
08966 #line 3318 "parse.y"
08967     {
08968                         (yyval.node) = new_args((yyvsp[(1) - (8)].node), (yyvsp[(3) - (8)].node), (yyvsp[(5) - (8)].id), (yyvsp[(7) - (8)].node), (yyvsp[(8) - (8)].node));
08969                     }
08970     break;
08971 
08972   case 383:
08973 
08974 /* Line 1806 of yacc.c  */
08975 #line 3322 "parse.y"
08976     {
08977                         (yyval.node) = new_args((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node), Qnone, Qnone, (yyvsp[(4) - (4)].node));
08978                     }
08979     break;
08980 
08981   case 384:
08982 
08983 /* Line 1806 of yacc.c  */
08984 #line 3326 "parse.y"
08985     {
08986                         (yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), Qnone, (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].node));
08987                     }
08988     break;
08989 
08990   case 385:
08991 
08992 /* Line 1806 of yacc.c  */
08993 #line 3330 "parse.y"
08994     {
08995                         (yyval.node) = new_args((yyvsp[(1) - (4)].node), Qnone, (yyvsp[(3) - (4)].id), Qnone, (yyvsp[(4) - (4)].node));
08996                     }
08997     break;
08998 
08999   case 386:
09000 
09001 /* Line 1806 of yacc.c  */
09002 #line 3334 "parse.y"
09003     {
09004                         (yyval.node) = new_args((yyvsp[(1) - (2)].node), Qnone, 1, Qnone, new_args_tail(Qnone, Qnone, Qnone));
09005                     /*%%%*/
09006                     /*%
09007                         dispatch1(excessed_comma, $$);
09008                     %*/
09009                     }
09010     break;
09011 
09012   case 387:
09013 
09014 /* Line 1806 of yacc.c  */
09015 #line 3342 "parse.y"
09016     {
09017                         (yyval.node) = new_args((yyvsp[(1) - (6)].node), Qnone, (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].node));
09018                     }
09019     break;
09020 
09021   case 388:
09022 
09023 /* Line 1806 of yacc.c  */
09024 #line 3346 "parse.y"
09025     {
09026                         (yyval.node) = new_args((yyvsp[(1) - (2)].node), Qnone, Qnone, Qnone, (yyvsp[(2) - (2)].node));
09027                     }
09028     break;
09029 
09030   case 389:
09031 
09032 /* Line 1806 of yacc.c  */
09033 #line 3350 "parse.y"
09034     {
09035                         (yyval.node) = new_args(Qnone, (yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), Qnone, (yyvsp[(4) - (4)].node));
09036                     }
09037     break;
09038 
09039   case 390:
09040 
09041 /* Line 1806 of yacc.c  */
09042 #line 3354 "parse.y"
09043     {
09044                         (yyval.node) = new_args(Qnone, (yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].node));
09045                     }
09046     break;
09047 
09048   case 391:
09049 
09050 /* Line 1806 of yacc.c  */
09051 #line 3358 "parse.y"
09052     {
09053                         (yyval.node) = new_args(Qnone, (yyvsp[(1) - (2)].node), Qnone, Qnone, (yyvsp[(2) - (2)].node));
09054                     }
09055     break;
09056 
09057   case 392:
09058 
09059 /* Line 1806 of yacc.c  */
09060 #line 3362 "parse.y"
09061     {
09062                         (yyval.node) = new_args(Qnone, (yyvsp[(1) - (4)].node), Qnone, (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].node));
09063                     }
09064     break;
09065 
09066   case 393:
09067 
09068 /* Line 1806 of yacc.c  */
09069 #line 3366 "parse.y"
09070     {
09071                         (yyval.node) = new_args(Qnone, Qnone, (yyvsp[(1) - (2)].id), Qnone, (yyvsp[(2) - (2)].node));
09072                     }
09073     break;
09074 
09075   case 394:
09076 
09077 /* Line 1806 of yacc.c  */
09078 #line 3370 "parse.y"
09079     {
09080                         (yyval.node) = new_args(Qnone, Qnone, (yyvsp[(1) - (4)].id), (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].node));
09081                     }
09082     break;
09083 
09084   case 395:
09085 
09086 /* Line 1806 of yacc.c  */
09087 #line 3374 "parse.y"
09088     {
09089                         (yyval.node) = new_args(Qnone, Qnone, Qnone, Qnone, (yyvsp[(1) - (1)].node));
09090                     }
09091     break;
09092 
09093   case 397:
09094 
09095 /* Line 1806 of yacc.c  */
09096 #line 3381 "parse.y"
09097     {
09098                         command_start = TRUE;
09099                     }
09100     break;
09101 
09102   case 398:
09103 
09104 /* Line 1806 of yacc.c  */
09105 #line 3387 "parse.y"
09106     {
09107                     /*%%%*/
09108                         (yyval.node) = 0;
09109                     /*%
09110                         $$ = blockvar_new(params_new(Qnil,Qnil,Qnil,Qnil,Qnil,Qnil,Qnil),
09111                                           escape_Qundef($2));
09112                     %*/
09113                     }
09114     break;
09115 
09116   case 399:
09117 
09118 /* Line 1806 of yacc.c  */
09119 #line 3396 "parse.y"
09120     {
09121                     /*%%%*/
09122                         (yyval.node) = 0;
09123                     /*%
09124                         $$ = blockvar_new(params_new(Qnil,Qnil,Qnil,Qnil,Qnil,Qnil,Qnil),
09125                                           Qnil);
09126                     %*/
09127                     }
09128     break;
09129 
09130   case 400:
09131 
09132 /* Line 1806 of yacc.c  */
09133 #line 3405 "parse.y"
09134     {
09135                     /*%%%*/
09136                         (yyval.node) = (yyvsp[(2) - (4)].node);
09137                     /*%
09138                         $$ = blockvar_new(escape_Qundef($2), escape_Qundef($3));
09139                     %*/
09140                     }
09141     break;
09142 
09143   case 401:
09144 
09145 /* Line 1806 of yacc.c  */
09146 #line 3416 "parse.y"
09147     {
09148                       (yyval.node) = 0;
09149                     }
09150     break;
09151 
09152   case 402:
09153 
09154 /* Line 1806 of yacc.c  */
09155 #line 3420 "parse.y"
09156     {
09157                     /*%%%*/
09158                         (yyval.node) = 0;
09159                     /*%
09160                         $$ = $3;
09161                     %*/
09162                     }
09163     break;
09164 
09165   case 405:
09166 
09167 /* Line 1806 of yacc.c  */
09168 #line 3446 "parse.y"
09169     {
09170                         new_bv(get_id((yyvsp[(1) - (1)].id)));
09171                     /*%%%*/
09172                     /*%
09173                         $$ = get_value($1);
09174                     %*/
09175                     }
09176     break;
09177 
09178   case 406:
09179 
09180 /* Line 1806 of yacc.c  */
09181 #line 3454 "parse.y"
09182     {
09183                         (yyval.node) = 0;
09184                     }
09185     break;
09186 
09187   case 407:
09188 
09189 /* Line 1806 of yacc.c  */
09190 #line 3459 "parse.y"
09191     {
09192                         (yyval.vars) = dyna_push();
09193                     }
09194     break;
09195 
09196   case 408:
09197 
09198 /* Line 1806 of yacc.c  */
09199 #line 3462 "parse.y"
09200     {
09201                         (yyval.num) = lpar_beg;
09202                         lpar_beg = ++paren_nest;
09203                     }
09204     break;
09205 
09206   case 409:
09207 
09208 /* Line 1806 of yacc.c  */
09209 #line 3467 "parse.y"
09210     {
09211                         (yyval.num) = ruby_sourceline;
09212                     }
09213     break;
09214 
09215   case 410:
09216 
09217 /* Line 1806 of yacc.c  */
09218 #line 3471 "parse.y"
09219     {
09220                         lpar_beg = (yyvsp[(2) - (5)].num);
09221                     /*%%%*/
09222                         (yyval.node) = NEW_LAMBDA((yyvsp[(3) - (5)].node), (yyvsp[(5) - (5)].node));
09223                         nd_set_line((yyval.node), (yyvsp[(4) - (5)].num));
09224                     /*%
09225                         $$ = dispatch2(lambda, $3, $5);
09226                     %*/
09227                         dyna_pop((yyvsp[(1) - (5)].vars));
09228                     }
09229     break;
09230 
09231   case 411:
09232 
09233 /* Line 1806 of yacc.c  */
09234 #line 3484 "parse.y"
09235     {
09236                     /*%%%*/
09237                         (yyval.node) = (yyvsp[(2) - (4)].node);
09238                     /*%
09239                         $$ = dispatch1(paren, $2);
09240                     %*/
09241                     }
09242     break;
09243 
09244   case 412:
09245 
09246 /* Line 1806 of yacc.c  */
09247 #line 3492 "parse.y"
09248     {
09249                         (yyval.node) = (yyvsp[(1) - (1)].node);
09250                     }
09251     break;
09252 
09253   case 413:
09254 
09255 /* Line 1806 of yacc.c  */
09256 #line 3498 "parse.y"
09257     {
09258                         (yyval.node) = (yyvsp[(2) - (3)].node);
09259                     }
09260     break;
09261 
09262   case 414:
09263 
09264 /* Line 1806 of yacc.c  */
09265 #line 3502 "parse.y"
09266     {
09267                         (yyval.node) = (yyvsp[(2) - (3)].node);
09268                     }
09269     break;
09270 
09271   case 415:
09272 
09273 /* Line 1806 of yacc.c  */
09274 #line 3508 "parse.y"
09275     {
09276                         (yyvsp[(1) - (1)].vars) = dyna_push();
09277                     /*%%%*/
09278                         (yyval.num) = ruby_sourceline;
09279                     /*% %*/
09280                     }
09281     break;
09282 
09283   case 416:
09284 
09285 /* Line 1806 of yacc.c  */
09286 #line 3517 "parse.y"
09287     {
09288                     /*%%%*/
09289                         (yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node));
09290                         nd_set_line((yyval.node), (yyvsp[(2) - (5)].num));
09291                     /*%
09292                         $$ = dispatch2(do_block, escape_Qundef($3), $4);
09293                     %*/
09294                         dyna_pop((yyvsp[(1) - (5)].vars));
09295                     }
09296     break;
09297 
09298   case 417:
09299 
09300 /* Line 1806 of yacc.c  */
09301 #line 3529 "parse.y"
09302     {
09303                     /*%%%*/
09304                         if (nd_type((yyvsp[(1) - (2)].node)) == NODE_YIELD) {
09305                             compile_error(PARSER_ARG "block given to yield");
09306                         }
09307                         else {
09308                             block_dup_check((yyvsp[(1) - (2)].node)->nd_args, (yyvsp[(2) - (2)].node));
09309                         }
09310                         (yyvsp[(2) - (2)].node)->nd_iter = (yyvsp[(1) - (2)].node);
09311                         (yyval.node) = (yyvsp[(2) - (2)].node);
09312                         fixpos((yyval.node), (yyvsp[(1) - (2)].node));
09313                     /*%
09314                         $$ = method_add_block($1, $2);
09315                     %*/
09316                     }
09317     break;
09318 
09319   case 418:
09320 
09321 /* Line 1806 of yacc.c  */
09322 #line 3545 "parse.y"
09323     {
09324                     /*%%%*/
09325                         (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
09326                     /*%
09327                         $$ = dispatch3(call, $1, $2, $3);
09328                         $$ = method_optarg($$, $4);
09329                     %*/
09330                     }
09331     break;
09332 
09333   case 419:
09334 
09335 /* Line 1806 of yacc.c  */
09336 #line 3554 "parse.y"
09337     {
09338                     /*%%%*/
09339                         block_dup_check((yyvsp[(4) - (5)].node), (yyvsp[(5) - (5)].node));
09340                         (yyvsp[(5) - (5)].node)->nd_iter = NEW_CALL((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].node));
09341                         (yyval.node) = (yyvsp[(5) - (5)].node);
09342                         fixpos((yyval.node), (yyvsp[(1) - (5)].node));
09343                     /*%
09344                         $$ = dispatch4(command_call, $1, $2, $3, $4);
09345                         $$ = method_add_block($$, $5);
09346                     %*/
09347                     }
09348     break;
09349 
09350   case 420:
09351 
09352 /* Line 1806 of yacc.c  */
09353 #line 3566 "parse.y"
09354     {
09355                     /*%%%*/
09356                         block_dup_check((yyvsp[(4) - (5)].node), (yyvsp[(5) - (5)].node));
09357                         (yyvsp[(5) - (5)].node)->nd_iter = NEW_CALL((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].node));
09358                         (yyval.node) = (yyvsp[(5) - (5)].node);
09359                         fixpos((yyval.node), (yyvsp[(1) - (5)].node));
09360                     /*%
09361                         $$ = dispatch4(command_call, $1, $2, $3, $4);
09362                         $$ = method_add_block($$, $5);
09363                     %*/
09364                     }
09365     break;
09366 
09367   case 421:
09368 
09369 /* Line 1806 of yacc.c  */
09370 #line 3580 "parse.y"
09371     {
09372                     /*%%%*/
09373                         (yyval.node) = (yyvsp[(1) - (2)].node);
09374                         (yyval.node)->nd_args = (yyvsp[(2) - (2)].node);
09375                     /*%
09376                         $$ = method_arg(dispatch1(fcall, $1), $2);
09377                     %*/
09378                     }
09379     break;
09380 
09381   case 422:
09382 
09383 /* Line 1806 of yacc.c  */
09384 #line 3589 "parse.y"
09385     {
09386                     /*%%%*/
09387                         (yyval.num) = ruby_sourceline;
09388                     /*% %*/
09389                     }
09390     break;
09391 
09392   case 423:
09393 
09394 /* Line 1806 of yacc.c  */
09395 #line 3595 "parse.y"
09396     {
09397                     /*%%%*/
09398                         (yyval.node) = NEW_CALL((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(5) - (5)].node));
09399                         nd_set_line((yyval.node), (yyvsp[(4) - (5)].num));
09400                     /*%
09401                         $$ = dispatch3(call, $1, ripper_id2sym('.'), $3);
09402                         $$ = method_optarg($$, $5);
09403                     %*/
09404                     }
09405     break;
09406 
09407   case 424:
09408 
09409 /* Line 1806 of yacc.c  */
09410 #line 3605 "parse.y"
09411     {
09412                     /*%%%*/
09413                         (yyval.num) = ruby_sourceline;
09414                     /*% %*/
09415                     }
09416     break;
09417 
09418   case 425:
09419 
09420 /* Line 1806 of yacc.c  */
09421 #line 3611 "parse.y"
09422     {
09423                     /*%%%*/
09424                         (yyval.node) = NEW_CALL((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(5) - (5)].node));
09425                         nd_set_line((yyval.node), (yyvsp[(4) - (5)].num));
09426                     /*%
09427                         $$ = dispatch3(call, $1, ripper_id2sym('.'), $3);
09428                         $$ = method_optarg($$, $5);
09429                     %*/
09430                     }
09431     break;
09432 
09433   case 426:
09434 
09435 /* Line 1806 of yacc.c  */
09436 #line 3621 "parse.y"
09437     {
09438                     /*%%%*/
09439                         (yyval.node) = NEW_CALL((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id), 0);
09440                     /*%
09441                         $$ = dispatch3(call, $1, ripper_intern("::"), $3);
09442                     %*/
09443                     }
09444     break;
09445 
09446   case 427:
09447 
09448 /* Line 1806 of yacc.c  */
09449 #line 3629 "parse.y"
09450     {
09451                     /*%%%*/
09452                         (yyval.num) = ruby_sourceline;
09453                     /*% %*/
09454                     }
09455     break;
09456 
09457   case 428:
09458 
09459 /* Line 1806 of yacc.c  */
09460 #line 3635 "parse.y"
09461     {
09462                     /*%%%*/
09463                         (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), rb_intern("call"), (yyvsp[(4) - (4)].node));
09464                         nd_set_line((yyval.node), (yyvsp[(3) - (4)].num));
09465                     /*%
09466                         $$ = dispatch3(call, $1, ripper_id2sym('.'),
09467                                        ripper_intern("call"));
09468                         $$ = method_optarg($$, $4);
09469                     %*/
09470                     }
09471     break;
09472 
09473   case 429:
09474 
09475 /* Line 1806 of yacc.c  */
09476 #line 3646 "parse.y"
09477     {
09478                     /*%%%*/
09479                         (yyval.num) = ruby_sourceline;
09480                     /*% %*/
09481                     }
09482     break;
09483 
09484   case 430:
09485 
09486 /* Line 1806 of yacc.c  */
09487 #line 3652 "parse.y"
09488     {
09489                     /*%%%*/
09490                         (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), rb_intern("call"), (yyvsp[(4) - (4)].node));
09491                         nd_set_line((yyval.node), (yyvsp[(3) - (4)].num));
09492                     /*%
09493                         $$ = dispatch3(call, $1, ripper_intern("::"),
09494                                        ripper_intern("call"));
09495                         $$ = method_optarg($$, $4);
09496                     %*/
09497                     }
09498     break;
09499 
09500   case 431:
09501 
09502 /* Line 1806 of yacc.c  */
09503 #line 3663 "parse.y"
09504     {
09505                     /*%%%*/
09506                         (yyval.node) = NEW_SUPER((yyvsp[(2) - (2)].node));
09507                     /*%
09508                         $$ = dispatch1(super, $2);
09509                     %*/
09510                     }
09511     break;
09512 
09513   case 432:
09514 
09515 /* Line 1806 of yacc.c  */
09516 #line 3671 "parse.y"
09517     {
09518                     /*%%%*/
09519                         (yyval.node) = NEW_ZSUPER();
09520                     /*%
09521                         $$ = dispatch0(zsuper);
09522                     %*/
09523                     }
09524     break;
09525 
09526   case 433:
09527 
09528 /* Line 1806 of yacc.c  */
09529 #line 3679 "parse.y"
09530     {
09531                     /*%%%*/
09532                         if ((yyvsp[(1) - (4)].node) && nd_type((yyvsp[(1) - (4)].node)) == NODE_SELF)
09533                             (yyval.node) = NEW_FCALL(tAREF, (yyvsp[(3) - (4)].node));
09534                         else
09535                             (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), tAREF, (yyvsp[(3) - (4)].node));
09536                         fixpos((yyval.node), (yyvsp[(1) - (4)].node));
09537                     /*%
09538                         $$ = dispatch2(aref, $1, escape_Qundef($3));
09539                     %*/
09540                     }
09541     break;
09542 
09543   case 434:
09544 
09545 /* Line 1806 of yacc.c  */
09546 #line 3693 "parse.y"
09547     {
09548                         (yyvsp[(1) - (1)].vars) = dyna_push();
09549                     /*%%%*/
09550                         (yyval.num) = ruby_sourceline;
09551                     /*%
09552                     %*/
09553                     }
09554     break;
09555 
09556   case 435:
09557 
09558 /* Line 1806 of yacc.c  */
09559 #line 3702 "parse.y"
09560     {
09561                     /*%%%*/
09562                         (yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node));
09563                         nd_set_line((yyval.node), (yyvsp[(2) - (5)].num));
09564                     /*%
09565                         $$ = dispatch2(brace_block, escape_Qundef($3), $4);
09566                     %*/
09567                         dyna_pop((yyvsp[(1) - (5)].vars));
09568                     }
09569     break;
09570 
09571   case 436:
09572 
09573 /* Line 1806 of yacc.c  */
09574 #line 3712 "parse.y"
09575     {
09576                         (yyvsp[(1) - (1)].vars) = dyna_push();
09577                     /*%%%*/
09578                         (yyval.num) = ruby_sourceline;
09579                     /*%
09580                     %*/
09581                     }
09582     break;
09583 
09584   case 437:
09585 
09586 /* Line 1806 of yacc.c  */
09587 #line 3721 "parse.y"
09588     {
09589                     /*%%%*/
09590                         (yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node));
09591                         nd_set_line((yyval.node), (yyvsp[(2) - (5)].num));
09592                     /*%
09593                         $$ = dispatch2(do_block, escape_Qundef($3), $4);
09594                     %*/
09595                         dyna_pop((yyvsp[(1) - (5)].vars));
09596                     }
09597     break;
09598 
09599   case 438:
09600 
09601 /* Line 1806 of yacc.c  */
09602 #line 3735 "parse.y"
09603     {
09604                     /*%%%*/
09605                         (yyval.node) = NEW_WHEN((yyvsp[(2) - (5)].node), (yyvsp[(4) - (5)].node), (yyvsp[(5) - (5)].node));
09606                     /*%
09607                         $$ = dispatch3(when, $2, $4, escape_Qundef($5));
09608                     %*/
09609                     }
09610     break;
09611 
09612   case 441:
09613 
09614 /* Line 1806 of yacc.c  */
09615 #line 3751 "parse.y"
09616     {
09617                     /*%%%*/
09618                         if ((yyvsp[(3) - (6)].node)) {
09619                             (yyvsp[(3) - (6)].node) = node_assign((yyvsp[(3) - (6)].node), NEW_ERRINFO());
09620                             (yyvsp[(5) - (6)].node) = block_append((yyvsp[(3) - (6)].node), (yyvsp[(5) - (6)].node));
09621                         }
09622                         (yyval.node) = NEW_RESBODY((yyvsp[(2) - (6)].node), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].node));
09623                         fixpos((yyval.node), (yyvsp[(2) - (6)].node)?(yyvsp[(2) - (6)].node):(yyvsp[(5) - (6)].node));
09624                     /*%
09625                         $$ = dispatch4(rescue,
09626                                        escape_Qundef($2),
09627                                        escape_Qundef($3),
09628                                        escape_Qundef($5),
09629                                        escape_Qundef($6));
09630                     %*/
09631                     }
09632     break;
09633 
09634   case 443:
09635 
09636 /* Line 1806 of yacc.c  */
09637 #line 3771 "parse.y"
09638     {
09639                     /*%%%*/
09640                         (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
09641                     /*%
09642                         $$ = rb_ary_new3(1, $1);
09643                     %*/
09644                     }
09645     break;
09646 
09647   case 444:
09648 
09649 /* Line 1806 of yacc.c  */
09650 #line 3779 "parse.y"
09651     {
09652                     /*%%%*/
09653                         if (!((yyval.node) = splat_array((yyvsp[(1) - (1)].node)))) (yyval.node) = (yyvsp[(1) - (1)].node);
09654                     /*%
09655                         $$ = $1;
09656                     %*/
09657                     }
09658     break;
09659 
09660   case 446:
09661 
09662 /* Line 1806 of yacc.c  */
09663 #line 3790 "parse.y"
09664     {
09665                         (yyval.node) = (yyvsp[(2) - (2)].node);
09666                     }
09667     break;
09668 
09669   case 448:
09670 
09671 /* Line 1806 of yacc.c  */
09672 #line 3797 "parse.y"
09673     {
09674                     /*%%%*/
09675                         (yyval.node) = (yyvsp[(2) - (2)].node);
09676                     /*%
09677                         $$ = dispatch1(ensure, $2);
09678                     %*/
09679                     }
09680     break;
09681 
09682   case 451:
09683 
09684 /* Line 1806 of yacc.c  */
09685 #line 3809 "parse.y"
09686     {
09687                     /*%%%*/
09688                         (yyval.node) = NEW_LIT(ID2SYM((yyvsp[(1) - (1)].id)));
09689                     /*%
09690                         $$ = dispatch1(symbol_literal, $1);
09691                     %*/
09692                     }
09693     break;
09694 
09695   case 453:
09696 
09697 /* Line 1806 of yacc.c  */
09698 #line 3820 "parse.y"
09699     {
09700                     /*%%%*/
09701                         NODE *node = (yyvsp[(1) - (1)].node);
09702                         if (!node) {
09703                             node = NEW_STR(STR_NEW0());
09704                         }
09705                         else {
09706                             node = evstr2dstr(node);
09707                         }
09708                         (yyval.node) = node;
09709                     /*%
09710                         $$ = $1;
09711                     %*/
09712                     }
09713     break;
09714 
09715   case 456:
09716 
09717 /* Line 1806 of yacc.c  */
09718 #line 3839 "parse.y"
09719     {
09720                     /*%%%*/
09721                         (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
09722                     /*%
09723                         $$ = dispatch2(string_concat, $1, $2);
09724                     %*/
09725                     }
09726     break;
09727 
09728   case 457:
09729 
09730 /* Line 1806 of yacc.c  */
09731 #line 3849 "parse.y"
09732     {
09733                     /*%%%*/
09734                         (yyval.node) = (yyvsp[(2) - (3)].node);
09735                     /*%
09736                         $$ = dispatch1(string_literal, $2);
09737                     %*/
09738                     }
09739     break;
09740 
09741   case 458:
09742 
09743 /* Line 1806 of yacc.c  */
09744 #line 3859 "parse.y"
09745     {
09746                     /*%%%*/
09747                         NODE *node = (yyvsp[(2) - (3)].node);
09748                         if (!node) {
09749                             node = NEW_XSTR(STR_NEW0());
09750                         }
09751                         else {
09752                             switch (nd_type(node)) {
09753                               case NODE_STR:
09754                                 nd_set_type(node, NODE_XSTR);
09755                                 break;
09756                               case NODE_DSTR:
09757                                 nd_set_type(node, NODE_DXSTR);
09758                                 break;
09759                               default:
09760                                 node = NEW_NODE(NODE_DXSTR, Qnil, 1, NEW_LIST(node));
09761                                 break;
09762                             }
09763                         }
09764                         (yyval.node) = node;
09765                     /*%
09766                         $$ = dispatch1(xstring_literal, $2);
09767                     %*/
09768                     }
09769     break;
09770 
09771   case 459:
09772 
09773 /* Line 1806 of yacc.c  */
09774 #line 3886 "parse.y"
09775     {
09776                     /*%%%*/
09777                         int options = (yyvsp[(3) - (3)].num);
09778                         NODE *node = (yyvsp[(2) - (3)].node);
09779                         NODE *list, *prev;
09780                         if (!node) {
09781                             node = NEW_LIT(reg_compile(STR_NEW0(), options));
09782                         }
09783                         else switch (nd_type(node)) {
09784                           case NODE_STR:
09785                             {
09786                                 VALUE src = node->nd_lit;
09787                                 nd_set_type(node, NODE_LIT);
09788                                 node->nd_lit = reg_compile(src, options);
09789                             }
09790                             break;
09791                           default:
09792                             node = NEW_NODE(NODE_DSTR, STR_NEW0(), 1, NEW_LIST(node));
09793                           case NODE_DSTR:
09794                             if (options & RE_OPTION_ONCE) {
09795                                 nd_set_type(node, NODE_DREGX_ONCE);
09796                             }
09797                             else {
09798                                 nd_set_type(node, NODE_DREGX);
09799                             }
09800                             node->nd_cflag = options & RE_OPTION_MASK;
09801                             if (!NIL_P(node->nd_lit)) reg_fragment_check(node->nd_lit, options);
09802                             for (list = (prev = node)->nd_next; list; list = list->nd_next) {
09803                                 if (nd_type(list->nd_head) == NODE_STR) {
09804                                     VALUE tail = list->nd_head->nd_lit;
09805                                     if (reg_fragment_check(tail, options) && prev && !NIL_P(prev->nd_lit)) {
09806                                         VALUE lit = prev == node ? prev->nd_lit : prev->nd_head->nd_lit;
09807                                         if (!literal_concat0(parser, lit, tail)) {
09808                                             node = 0;
09809                                             break;
09810                                         }
09811                                         rb_str_resize(tail, 0);
09812                                         prev->nd_next = list->nd_next;
09813                                         rb_gc_force_recycle((VALUE)list->nd_head);
09814                                         rb_gc_force_recycle((VALUE)list);
09815                                         list = prev;
09816                                     }
09817                                     else {
09818                                         prev = list;
09819                                     }
09820                                 }
09821                                 else {
09822                                     prev = 0;
09823                                 }
09824                             }
09825                             if (!node->nd_next) {
09826                                 VALUE src = node->nd_lit;
09827                                 nd_set_type(node, NODE_LIT);
09828                                 node->nd_lit = reg_compile(src, options);
09829                             }
09830                             break;
09831                         }
09832                         (yyval.node) = node;
09833                     /*%
09834                         $$ = dispatch2(regexp_literal, $2, $3);
09835                     %*/
09836                     }
09837     break;
09838 
09839   case 460:
09840 
09841 /* Line 1806 of yacc.c  */
09842 #line 3951 "parse.y"
09843     {
09844                     /*%%%*/
09845                         (yyval.node) = NEW_ZARRAY();
09846                     /*%
09847                         $$ = dispatch0(words_new);
09848                         $$ = dispatch1(array, $$);
09849                     %*/
09850                     }
09851     break;
09852 
09853   case 461:
09854 
09855 /* Line 1806 of yacc.c  */
09856 #line 3960 "parse.y"
09857     {
09858                     /*%%%*/
09859                         (yyval.node) = (yyvsp[(2) - (3)].node);
09860                     /*%
09861                         $$ = dispatch1(array, $2);
09862                     %*/
09863                     }
09864     break;
09865 
09866   case 462:
09867 
09868 /* Line 1806 of yacc.c  */
09869 #line 3970 "parse.y"
09870     {
09871                     /*%%%*/
09872                         (yyval.node) = 0;
09873                     /*%
09874                         $$ = dispatch0(words_new);
09875                     %*/
09876                     }
09877     break;
09878 
09879   case 463:
09880 
09881 /* Line 1806 of yacc.c  */
09882 #line 3978 "parse.y"
09883     {
09884                     /*%%%*/
09885                         (yyval.node) = list_append((yyvsp[(1) - (3)].node), evstr2dstr((yyvsp[(2) - (3)].node)));
09886                     /*%
09887                         $$ = dispatch2(words_add, $1, $2);
09888                     %*/
09889                     }
09890     break;
09891 
09892   case 465:
09893 
09894 /* Line 1806 of yacc.c  */
09895 #line 3996 "parse.y"
09896     {
09897                     /*%%%*/
09898                         (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
09899                     /*%
09900                         $$ = dispatch2(word_add, $1, $2);
09901                     %*/
09902                     }
09903     break;
09904 
09905   case 466:
09906 
09907 /* Line 1806 of yacc.c  */
09908 #line 4006 "parse.y"
09909     {
09910                     /*%%%*/
09911                         (yyval.node) = NEW_ZARRAY();
09912                     /*%
09913                         $$ = dispatch0(symbols_new);
09914                         $$ = dispatch1(array, $$);
09915                     %*/
09916                     }
09917     break;
09918 
09919   case 467:
09920 
09921 /* Line 1806 of yacc.c  */
09922 #line 4015 "parse.y"
09923     {
09924                     /*%%%*/
09925                         (yyval.node) = (yyvsp[(2) - (3)].node);
09926                     /*%
09927                         $$ = dispatch1(array, $2);
09928                     %*/
09929                     }
09930     break;
09931 
09932   case 468:
09933 
09934 /* Line 1806 of yacc.c  */
09935 #line 4025 "parse.y"
09936     {
09937                     /*%%%*/
09938                         (yyval.node) = 0;
09939                     /*%
09940                         $$ = dispatch0(symbols_new);
09941                     %*/
09942                     }
09943     break;
09944 
09945   case 469:
09946 
09947 /* Line 1806 of yacc.c  */
09948 #line 4033 "parse.y"
09949     {
09950                     /*%%%*/
09951                         (yyvsp[(2) - (3)].node) = evstr2dstr((yyvsp[(2) - (3)].node));
09952                         nd_set_type((yyvsp[(2) - (3)].node), NODE_DSYM);
09953                         (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].node));
09954                     /*%
09955                         $$ = dispatch2(symbols_add, $1, $2);
09956                     %*/
09957                     }
09958     break;
09959 
09960   case 470:
09961 
09962 /* Line 1806 of yacc.c  */
09963 #line 4045 "parse.y"
09964     {
09965                     /*%%%*/
09966                         (yyval.node) = NEW_ZARRAY();
09967                     /*%
09968                         $$ = dispatch0(qwords_new);
09969                         $$ = dispatch1(array, $$);
09970                     %*/
09971                     }
09972     break;
09973 
09974   case 471:
09975 
09976 /* Line 1806 of yacc.c  */
09977 #line 4054 "parse.y"
09978     {
09979                     /*%%%*/
09980                         (yyval.node) = (yyvsp[(2) - (3)].node);
09981                     /*%
09982                         $$ = dispatch1(array, $2);
09983                     %*/
09984                     }
09985     break;
09986 
09987   case 472:
09988 
09989 /* Line 1806 of yacc.c  */
09990 #line 4064 "parse.y"
09991     {
09992                     /*%%%*/
09993                         (yyval.node) = NEW_ZARRAY();
09994                     /*%
09995                         $$ = dispatch0(qsymbols_new);
09996                         $$ = dispatch1(array, $$);
09997                     %*/
09998                     }
09999     break;
10000 
10001   case 473:
10002 
10003 /* Line 1806 of yacc.c  */
10004 #line 4073 "parse.y"
10005     {
10006                     /*%%%*/
10007                         (yyval.node) = (yyvsp[(2) - (3)].node);
10008                     /*%
10009                         $$ = dispatch1(array, $2);
10010                     %*/
10011                     }
10012     break;
10013 
10014   case 474:
10015 
10016 /* Line 1806 of yacc.c  */
10017 #line 4083 "parse.y"
10018     {
10019                     /*%%%*/
10020                         (yyval.node) = 0;
10021                     /*%
10022                         $$ = dispatch0(qwords_new);
10023                     %*/
10024                     }
10025     break;
10026 
10027   case 475:
10028 
10029 /* Line 1806 of yacc.c  */
10030 #line 4091 "parse.y"
10031     {
10032                     /*%%%*/
10033                         (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].node));
10034                     /*%
10035                         $$ = dispatch2(qwords_add, $1, $2);
10036                     %*/
10037                     }
10038     break;
10039 
10040   case 476:
10041 
10042 /* Line 1806 of yacc.c  */
10043 #line 4101 "parse.y"
10044     {
10045                     /*%%%*/
10046                         (yyval.node) = 0;
10047                     /*%
10048                         $$ = dispatch0(qsymbols_new);
10049                     %*/
10050                     }
10051     break;
10052 
10053   case 477:
10054 
10055 /* Line 1806 of yacc.c  */
10056 #line 4109 "parse.y"
10057     {
10058                     /*%%%*/
10059                         VALUE lit;
10060                         lit = (yyvsp[(2) - (3)].node)->nd_lit;
10061                         (yyvsp[(2) - (3)].node)->nd_lit = ID2SYM(rb_intern_str(lit));
10062                         nd_set_type((yyvsp[(2) - (3)].node), NODE_LIT);
10063                         (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].node));
10064                     /*%
10065                         $$ = dispatch2(qsymbols_add, $1, $2);
10066                     %*/
10067                     }
10068     break;
10069 
10070   case 478:
10071 
10072 /* Line 1806 of yacc.c  */
10073 #line 4123 "parse.y"
10074     {
10075                     /*%%%*/
10076                         (yyval.node) = 0;
10077                     /*%
10078                         $$ = dispatch0(string_content);
10079                     %*/
10080                     }
10081     break;
10082 
10083   case 479:
10084 
10085 /* Line 1806 of yacc.c  */
10086 #line 4131 "parse.y"
10087     {
10088                     /*%%%*/
10089                         (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
10090                     /*%
10091                         $$ = dispatch2(string_add, $1, $2);
10092                     %*/
10093                     }
10094     break;
10095 
10096   case 480:
10097 
10098 /* Line 1806 of yacc.c  */
10099 #line 4141 "parse.y"
10100     {
10101                     /*%%%*/
10102                         (yyval.node) = 0;
10103                     /*%
10104                         $$ = dispatch0(xstring_new);
10105                     %*/
10106                     }
10107     break;
10108 
10109   case 481:
10110 
10111 /* Line 1806 of yacc.c  */
10112 #line 4149 "parse.y"
10113     {
10114                     /*%%%*/
10115                         (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
10116                     /*%
10117                         $$ = dispatch2(xstring_add, $1, $2);
10118                     %*/
10119                     }
10120     break;
10121 
10122   case 482:
10123 
10124 /* Line 1806 of yacc.c  */
10125 #line 4159 "parse.y"
10126     {
10127                     /*%%%*/
10128                         (yyval.node) = 0;
10129                     /*%
10130                         $$ = dispatch0(regexp_new);
10131                     %*/
10132                     }
10133     break;
10134 
10135   case 483:
10136 
10137 /* Line 1806 of yacc.c  */
10138 #line 4167 "parse.y"
10139     {
10140                     /*%%%*/
10141                         NODE *head = (yyvsp[(1) - (2)].node), *tail = (yyvsp[(2) - (2)].node);
10142                         if (!head) {
10143                             (yyval.node) = tail;
10144                         }
10145                         else if (!tail) {
10146                             (yyval.node) = head;
10147                         }
10148                         else {
10149                             switch (nd_type(head)) {
10150                               case NODE_STR:
10151                                 nd_set_type(head, NODE_DSTR);
10152                                 break;
10153                               case NODE_DSTR:
10154                                 break;
10155                               default:
10156                                 head = list_append(NEW_DSTR(Qnil), head);
10157                                 break;
10158                             }
10159                             (yyval.node) = list_append(head, tail);
10160                         }
10161                     /*%
10162                         $$ = dispatch2(regexp_add, $1, $2);
10163                     %*/
10164                     }
10165     break;
10166 
10167   case 485:
10168 
10169 /* Line 1806 of yacc.c  */
10170 #line 4197 "parse.y"
10171     {
10172                         (yyval.node) = lex_strterm;
10173                         lex_strterm = 0;
10174                         lex_state = EXPR_BEG;
10175                     }
10176     break;
10177 
10178   case 486:
10179 
10180 /* Line 1806 of yacc.c  */
10181 #line 4203 "parse.y"
10182     {
10183                     /*%%%*/
10184                         lex_strterm = (yyvsp[(2) - (3)].node);
10185                         (yyval.node) = NEW_EVSTR((yyvsp[(3) - (3)].node));
10186                     /*%
10187                         lex_strterm = $<node>2;
10188                         $$ = dispatch1(string_dvar, $3);
10189                     %*/
10190                     }
10191     break;
10192 
10193   case 487:
10194 
10195 /* Line 1806 of yacc.c  */
10196 #line 4213 "parse.y"
10197     {
10198                         (yyvsp[(1) - (1)].val) = cond_stack;
10199                         (yyval.val) = cmdarg_stack;
10200                         cond_stack = 0;
10201                         cmdarg_stack = 0;
10202                     }
10203     break;
10204 
10205   case 488:
10206 
10207 /* Line 1806 of yacc.c  */
10208 #line 4219 "parse.y"
10209     {
10210                         (yyval.node) = lex_strterm;
10211                         lex_strterm = 0;
10212                         lex_state = EXPR_BEG;
10213                     }
10214     break;
10215 
10216   case 489:
10217 
10218 /* Line 1806 of yacc.c  */
10219 #line 4224 "parse.y"
10220     {
10221                         (yyval.num) = brace_nest;
10222                         brace_nest = 0;
10223                     }
10224     break;
10225 
10226   case 490:
10227 
10228 /* Line 1806 of yacc.c  */
10229 #line 4229 "parse.y"
10230     {
10231                         cond_stack = (yyvsp[(1) - (6)].val);
10232                         cmdarg_stack = (yyvsp[(2) - (6)].val);
10233                         lex_strterm = (yyvsp[(3) - (6)].node);
10234                         brace_nest = (yyvsp[(4) - (6)].num);
10235                     /*%%%*/
10236                         if ((yyvsp[(5) - (6)].node)) (yyvsp[(5) - (6)].node)->flags &= ~NODE_FL_NEWLINE;
10237                         (yyval.node) = new_evstr((yyvsp[(5) - (6)].node));
10238                     /*%
10239                         $$ = dispatch1(string_embexpr, $5);
10240                     %*/
10241                     }
10242     break;
10243 
10244   case 491:
10245 
10246 /* Line 1806 of yacc.c  */
10247 #line 4244 "parse.y"
10248     {
10249                     /*%%%*/
10250                         (yyval.node) = NEW_GVAR((yyvsp[(1) - (1)].id));
10251                     /*%
10252                         $$ = dispatch1(var_ref, $1);
10253                     %*/
10254                     }
10255     break;
10256 
10257   case 492:
10258 
10259 /* Line 1806 of yacc.c  */
10260 #line 4252 "parse.y"
10261     {
10262                     /*%%%*/
10263                         (yyval.node) = NEW_IVAR((yyvsp[(1) - (1)].id));
10264                     /*%
10265                         $$ = dispatch1(var_ref, $1);
10266                     %*/
10267                     }
10268     break;
10269 
10270   case 493:
10271 
10272 /* Line 1806 of yacc.c  */
10273 #line 4260 "parse.y"
10274     {
10275                     /*%%%*/
10276                         (yyval.node) = NEW_CVAR((yyvsp[(1) - (1)].id));
10277                     /*%
10278                         $$ = dispatch1(var_ref, $1);
10279                     %*/
10280                     }
10281     break;
10282 
10283   case 495:
10284 
10285 /* Line 1806 of yacc.c  */
10286 #line 4271 "parse.y"
10287     {
10288                         lex_state = EXPR_END;
10289                     /*%%%*/
10290                         (yyval.id) = (yyvsp[(2) - (2)].id);
10291                     /*%
10292                         $$ = dispatch1(symbol, $2);
10293                     %*/
10294                     }
10295     break;
10296 
10297   case 500:
10298 
10299 /* Line 1806 of yacc.c  */
10300 #line 4288 "parse.y"
10301     {
10302                         lex_state = EXPR_END;
10303                     /*%%%*/
10304                         (yyval.node) = dsym_node((yyvsp[(2) - (3)].node));
10305                     /*%
10306                         $$ = dispatch1(dyna_symbol, $2);
10307                     %*/
10308                     }
10309     break;
10310 
10311   case 502:
10312 
10313 /* Line 1806 of yacc.c  */
10314 #line 4300 "parse.y"
10315     {
10316                     /*%%%*/
10317                         (yyval.node) = negate_lit((yyvsp[(2) - (2)].node));
10318                     /*%
10319                         $$ = dispatch2(unary, ripper_intern("-@"), $2);
10320                     %*/
10321                     }
10322     break;
10323 
10324   case 512:
10325 
10326 /* Line 1806 of yacc.c  */
10327 #line 4322 "parse.y"
10328     {ifndef_ripper((yyval.id) = keyword_nil);}
10329     break;
10330 
10331   case 513:
10332 
10333 /* Line 1806 of yacc.c  */
10334 #line 4323 "parse.y"
10335     {ifndef_ripper((yyval.id) = keyword_self);}
10336     break;
10337 
10338   case 514:
10339 
10340 /* Line 1806 of yacc.c  */
10341 #line 4324 "parse.y"
10342     {ifndef_ripper((yyval.id) = keyword_true);}
10343     break;
10344 
10345   case 515:
10346 
10347 /* Line 1806 of yacc.c  */
10348 #line 4325 "parse.y"
10349     {ifndef_ripper((yyval.id) = keyword_false);}
10350     break;
10351 
10352   case 516:
10353 
10354 /* Line 1806 of yacc.c  */
10355 #line 4326 "parse.y"
10356     {ifndef_ripper((yyval.id) = keyword__FILE__);}
10357     break;
10358 
10359   case 517:
10360 
10361 /* Line 1806 of yacc.c  */
10362 #line 4327 "parse.y"
10363     {ifndef_ripper((yyval.id) = keyword__LINE__);}
10364     break;
10365 
10366   case 518:
10367 
10368 /* Line 1806 of yacc.c  */
10369 #line 4328 "parse.y"
10370     {ifndef_ripper((yyval.id) = keyword__ENCODING__);}
10371     break;
10372 
10373   case 519:
10374 
10375 /* Line 1806 of yacc.c  */
10376 #line 4332 "parse.y"
10377     {
10378                     /*%%%*/
10379                         if (!((yyval.node) = gettable((yyvsp[(1) - (1)].id)))) (yyval.node) = NEW_BEGIN(0);
10380                     /*%
10381                         if (id_is_var(get_id($1))) {
10382                             $$ = dispatch1(var_ref, $1);
10383                         }
10384                         else {
10385                             $$ = dispatch1(vcall, $1);
10386                         }
10387                     %*/
10388                     }
10389     break;
10390 
10391   case 520:
10392 
10393 /* Line 1806 of yacc.c  */
10394 #line 4345 "parse.y"
10395     {
10396                     /*%%%*/
10397                         if (!((yyval.node) = gettable((yyvsp[(1) - (1)].id)))) (yyval.node) = NEW_BEGIN(0);
10398                     /*%
10399                         $$ = dispatch1(var_ref, $1);
10400                     %*/
10401                     }
10402     break;
10403 
10404   case 521:
10405 
10406 /* Line 1806 of yacc.c  */
10407 #line 4355 "parse.y"
10408     {
10409                         (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
10410                     /*%%%*/
10411                     /*%
10412                         $$ = dispatch1(var_field, $$);
10413                     %*/
10414                     }
10415     break;
10416 
10417   case 522:
10418 
10419 /* Line 1806 of yacc.c  */
10420 #line 4363 "parse.y"
10421     {
10422                         (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
10423                     /*%%%*/
10424                     /*%
10425                         $$ = dispatch1(var_field, $$);
10426                     %*/
10427                     }
10428     break;
10429 
10430   case 525:
10431 
10432 /* Line 1806 of yacc.c  */
10433 #line 4377 "parse.y"
10434     {
10435                     /*%%%*/
10436                         (yyval.node) = 0;
10437                     /*%
10438                         $$ = Qnil;
10439                     %*/
10440                     }
10441     break;
10442 
10443   case 526:
10444 
10445 /* Line 1806 of yacc.c  */
10446 #line 4385 "parse.y"
10447     {
10448                         lex_state = EXPR_BEG;
10449                         command_start = TRUE;
10450                     }
10451     break;
10452 
10453   case 527:
10454 
10455 /* Line 1806 of yacc.c  */
10456 #line 4390 "parse.y"
10457     {
10458                         (yyval.node) = (yyvsp[(3) - (4)].node);
10459                     }
10460     break;
10461 
10462   case 528:
10463 
10464 /* Line 1806 of yacc.c  */
10465 #line 4394 "parse.y"
10466     {
10467                     /*%%%*/
10468                         yyerrok;
10469                         (yyval.node) = 0;
10470                     /*%
10471                         yyerrok;
10472                         $$ = Qnil;
10473                     %*/
10474                     }
10475     break;
10476 
10477   case 529:
10478 
10479 /* Line 1806 of yacc.c  */
10480 #line 4406 "parse.y"
10481     {
10482                     /*%%%*/
10483                         (yyval.node) = (yyvsp[(2) - (3)].node);
10484                     /*%
10485                         $$ = dispatch1(paren, $2);
10486                     %*/
10487                         lex_state = EXPR_BEG;
10488                         command_start = TRUE;
10489                     }
10490     break;
10491 
10492   case 530:
10493 
10494 /* Line 1806 of yacc.c  */
10495 #line 4415 "parse.y"
10496     {
10497                         (yyval.num) = parser->parser_in_kwarg;
10498                         parser->parser_in_kwarg = 1;
10499                     }
10500     break;
10501 
10502   case 531:
10503 
10504 /* Line 1806 of yacc.c  */
10505 #line 4420 "parse.y"
10506     {
10507                         parser->parser_in_kwarg = (yyvsp[(1) - (3)].num);
10508                         (yyval.node) = (yyvsp[(2) - (3)].node);
10509                         lex_state = EXPR_BEG;
10510                         command_start = TRUE;
10511                     }
10512     break;
10513 
10514   case 532:
10515 
10516 /* Line 1806 of yacc.c  */
10517 #line 4429 "parse.y"
10518     {
10519                         (yyval.node) = new_args_tail((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].id));
10520                     }
10521     break;
10522 
10523   case 533:
10524 
10525 /* Line 1806 of yacc.c  */
10526 #line 4433 "parse.y"
10527     {
10528                         (yyval.node) = new_args_tail((yyvsp[(1) - (2)].node), Qnone, (yyvsp[(2) - (2)].id));
10529                     }
10530     break;
10531 
10532   case 534:
10533 
10534 /* Line 1806 of yacc.c  */
10535 #line 4437 "parse.y"
10536     {
10537                         (yyval.node) = new_args_tail(Qnone, (yyvsp[(1) - (2)].id), (yyvsp[(2) - (2)].id));
10538                     }
10539     break;
10540 
10541   case 535:
10542 
10543 /* Line 1806 of yacc.c  */
10544 #line 4441 "parse.y"
10545     {
10546                         (yyval.node) = new_args_tail(Qnone, Qnone, (yyvsp[(1) - (1)].id));
10547                     }
10548     break;
10549 
10550   case 536:
10551 
10552 /* Line 1806 of yacc.c  */
10553 #line 4447 "parse.y"
10554     {
10555                         (yyval.node) = (yyvsp[(2) - (2)].node);
10556                     }
10557     break;
10558 
10559   case 537:
10560 
10561 /* Line 1806 of yacc.c  */
10562 #line 4451 "parse.y"
10563     {
10564                         (yyval.node) = new_args_tail(Qnone, Qnone, Qnone);
10565                     }
10566     break;
10567 
10568   case 538:
10569 
10570 /* Line 1806 of yacc.c  */
10571 #line 4457 "parse.y"
10572     {
10573                         (yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), (yyvsp[(5) - (6)].id), Qnone, (yyvsp[(6) - (6)].node));
10574                     }
10575     break;
10576 
10577   case 539:
10578 
10579 /* Line 1806 of yacc.c  */
10580 #line 4461 "parse.y"
10581     {
10582                         (yyval.node) = new_args((yyvsp[(1) - (8)].node), (yyvsp[(3) - (8)].node), (yyvsp[(5) - (8)].id), (yyvsp[(7) - (8)].node), (yyvsp[(8) - (8)].node));
10583                     }
10584     break;
10585 
10586   case 540:
10587 
10588 /* Line 1806 of yacc.c  */
10589 #line 4465 "parse.y"
10590     {
10591                         (yyval.node) = new_args((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node), Qnone, Qnone, (yyvsp[(4) - (4)].node));
10592                     }
10593     break;
10594 
10595   case 541:
10596 
10597 /* Line 1806 of yacc.c  */
10598 #line 4469 "parse.y"
10599     {
10600                         (yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), Qnone, (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].node));
10601                     }
10602     break;
10603 
10604   case 542:
10605 
10606 /* Line 1806 of yacc.c  */
10607 #line 4473 "parse.y"
10608     {
10609                         (yyval.node) = new_args((yyvsp[(1) - (4)].node), Qnone, (yyvsp[(3) - (4)].id), Qnone, (yyvsp[(4) - (4)].node));
10610                     }
10611     break;
10612 
10613   case 543:
10614 
10615 /* Line 1806 of yacc.c  */
10616 #line 4477 "parse.y"
10617     {
10618                         (yyval.node) = new_args((yyvsp[(1) - (6)].node), Qnone, (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].node));
10619                     }
10620     break;
10621 
10622   case 544:
10623 
10624 /* Line 1806 of yacc.c  */
10625 #line 4481 "parse.y"
10626     {
10627                         (yyval.node) = new_args((yyvsp[(1) - (2)].node), Qnone, Qnone, Qnone, (yyvsp[(2) - (2)].node));
10628                     }
10629     break;
10630 
10631   case 545:
10632 
10633 /* Line 1806 of yacc.c  */
10634 #line 4485 "parse.y"
10635     {
10636                         (yyval.node) = new_args(Qnone, (yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), Qnone, (yyvsp[(4) - (4)].node));
10637                     }
10638     break;
10639 
10640   case 546:
10641 
10642 /* Line 1806 of yacc.c  */
10643 #line 4489 "parse.y"
10644     {
10645                         (yyval.node) = new_args(Qnone, (yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].node));
10646                     }
10647     break;
10648 
10649   case 547:
10650 
10651 /* Line 1806 of yacc.c  */
10652 #line 4493 "parse.y"
10653     {
10654                         (yyval.node) = new_args(Qnone, (yyvsp[(1) - (2)].node), Qnone, Qnone, (yyvsp[(2) - (2)].node));
10655                     }
10656     break;
10657 
10658   case 548:
10659 
10660 /* Line 1806 of yacc.c  */
10661 #line 4497 "parse.y"
10662     {
10663                         (yyval.node) = new_args(Qnone, (yyvsp[(1) - (4)].node), Qnone, (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].node));
10664                     }
10665     break;
10666 
10667   case 549:
10668 
10669 /* Line 1806 of yacc.c  */
10670 #line 4501 "parse.y"
10671     {
10672                         (yyval.node) = new_args(Qnone, Qnone, (yyvsp[(1) - (2)].id), Qnone, (yyvsp[(2) - (2)].node));
10673                     }
10674     break;
10675 
10676   case 550:
10677 
10678 /* Line 1806 of yacc.c  */
10679 #line 4505 "parse.y"
10680     {
10681                         (yyval.node) = new_args(Qnone, Qnone, (yyvsp[(1) - (4)].id), (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].node));
10682                     }
10683     break;
10684 
10685   case 551:
10686 
10687 /* Line 1806 of yacc.c  */
10688 #line 4509 "parse.y"
10689     {
10690                         (yyval.node) = new_args(Qnone, Qnone, Qnone, Qnone, (yyvsp[(1) - (1)].node));
10691                     }
10692     break;
10693 
10694   case 552:
10695 
10696 /* Line 1806 of yacc.c  */
10697 #line 4513 "parse.y"
10698     {
10699                         (yyval.node) = new_args_tail(Qnone, Qnone, Qnone);
10700                         (yyval.node) = new_args(Qnone, Qnone, Qnone, Qnone, (yyval.node));
10701                     }
10702     break;
10703 
10704   case 553:
10705 
10706 /* Line 1806 of yacc.c  */
10707 #line 4520 "parse.y"
10708     {
10709                     /*%%%*/
10710                         yyerror("formal argument cannot be a constant");
10711                         (yyval.id) = 0;
10712                     /*%
10713                         $$ = dispatch1(param_error, $1);
10714                     %*/
10715                     }
10716     break;
10717 
10718   case 554:
10719 
10720 /* Line 1806 of yacc.c  */
10721 #line 4529 "parse.y"
10722     {
10723                     /*%%%*/
10724                         yyerror("formal argument cannot be an instance variable");
10725                         (yyval.id) = 0;
10726                     /*%
10727                         $$ = dispatch1(param_error, $1);
10728                     %*/
10729                     }
10730     break;
10731 
10732   case 555:
10733 
10734 /* Line 1806 of yacc.c  */
10735 #line 4538 "parse.y"
10736     {
10737                     /*%%%*/
10738                         yyerror("formal argument cannot be a global variable");
10739                         (yyval.id) = 0;
10740                     /*%
10741                         $$ = dispatch1(param_error, $1);
10742                     %*/
10743                     }
10744     break;
10745 
10746   case 556:
10747 
10748 /* Line 1806 of yacc.c  */
10749 #line 4547 "parse.y"
10750     {
10751                     /*%%%*/
10752                         yyerror("formal argument cannot be a class variable");
10753                         (yyval.id) = 0;
10754                     /*%
10755                         $$ = dispatch1(param_error, $1);
10756                     %*/
10757                     }
10758     break;
10759 
10760   case 558:
10761 
10762 /* Line 1806 of yacc.c  */
10763 #line 4559 "parse.y"
10764     {
10765                         formal_argument(get_id((yyvsp[(1) - (1)].id)));
10766                         (yyval.id) = (yyvsp[(1) - (1)].id);
10767                     }
10768     break;
10769 
10770   case 559:
10771 
10772 /* Line 1806 of yacc.c  */
10773 #line 4566 "parse.y"
10774     {
10775                         arg_var(get_id((yyvsp[(1) - (1)].id)));
10776                     /*%%%*/
10777                         (yyval.node) = NEW_ARGS_AUX((yyvsp[(1) - (1)].id), 1);
10778                     /*%
10779                         $$ = get_value($1);
10780                     %*/
10781                     }
10782     break;
10783 
10784   case 560:
10785 
10786 /* Line 1806 of yacc.c  */
10787 #line 4575 "parse.y"
10788     {
10789                         ID tid = internal_id();
10790                         arg_var(tid);
10791                     /*%%%*/
10792                         if (dyna_in_block()) {
10793                             (yyvsp[(2) - (3)].node)->nd_value = NEW_DVAR(tid);
10794                         }
10795                         else {
10796                             (yyvsp[(2) - (3)].node)->nd_value = NEW_LVAR(tid);
10797                         }
10798                         (yyval.node) = NEW_ARGS_AUX(tid, 1);
10799                         (yyval.node)->nd_next = (yyvsp[(2) - (3)].node);
10800                     /*%
10801                         $$ = dispatch1(mlhs_paren, $2);
10802                     %*/
10803                     }
10804     break;
10805 
10806   case 562:
10807 
10808 /* Line 1806 of yacc.c  */
10809 #line 4601 "parse.y"
10810     {
10811                     /*%%%*/
10812                         (yyval.node) = (yyvsp[(1) - (3)].node);
10813                         (yyval.node)->nd_plen++;
10814                         (yyval.node)->nd_next = block_append((yyval.node)->nd_next, (yyvsp[(3) - (3)].node)->nd_next);
10815                         rb_gc_force_recycle((VALUE)(yyvsp[(3) - (3)].node));
10816                     /*%
10817                         $$ = rb_ary_push($1, $3);
10818                     %*/
10819                     }
10820     break;
10821 
10822   case 563:
10823 
10824 /* Line 1806 of yacc.c  */
10825 #line 4615 "parse.y"
10826     {
10827                         arg_var(formal_argument(get_id((yyvsp[(1) - (1)].id))));
10828                         (yyval.id) = (yyvsp[(1) - (1)].id);
10829                     }
10830     break;
10831 
10832   case 564:
10833 
10834 /* Line 1806 of yacc.c  */
10835 #line 4622 "parse.y"
10836     {
10837                         (yyval.node) = assignable((yyvsp[(1) - (2)].id), (yyvsp[(2) - (2)].node));
10838                     /*%%%*/
10839                         (yyval.node) = NEW_KW_ARG(0, (yyval.node));
10840                     /*%
10841                         $$ = rb_assoc_new($$, $2);
10842                     %*/
10843                     }
10844     break;
10845 
10846   case 565:
10847 
10848 /* Line 1806 of yacc.c  */
10849 #line 4631 "parse.y"
10850     {
10851                         (yyval.node) = assignable((yyvsp[(1) - (1)].id), (NODE *)-1);
10852                     /*%%%*/
10853                         (yyval.node) = NEW_KW_ARG(0, (yyval.node));
10854                     /*%
10855                         $$ = rb_assoc_new($$, 0);
10856                     %*/
10857                     }
10858     break;
10859 
10860   case 566:
10861 
10862 /* Line 1806 of yacc.c  */
10863 #line 4642 "parse.y"
10864     {
10865                         (yyval.node) = assignable((yyvsp[(1) - (2)].id), (yyvsp[(2) - (2)].node));
10866                     /*%%%*/
10867                         (yyval.node) = NEW_KW_ARG(0, (yyval.node));
10868                     /*%
10869                         $$ = rb_assoc_new($$, $2);
10870                     %*/
10871                     }
10872     break;
10873 
10874   case 567:
10875 
10876 /* Line 1806 of yacc.c  */
10877 #line 4651 "parse.y"
10878     {
10879                         (yyval.node) = assignable((yyvsp[(1) - (1)].id), (NODE *)-1);
10880                     /*%%%*/
10881                         (yyval.node) = NEW_KW_ARG(0, (yyval.node));
10882                     /*%
10883                         $$ = rb_assoc_new($$, 0);
10884                     %*/
10885                     }
10886     break;
10887 
10888   case 568:
10889 
10890 /* Line 1806 of yacc.c  */
10891 #line 4662 "parse.y"
10892     {
10893                     /*%%%*/
10894                         (yyval.node) = (yyvsp[(1) - (1)].node);
10895                     /*%
10896                         $$ = rb_ary_new3(1, $1);
10897                     %*/
10898                     }
10899     break;
10900 
10901   case 569:
10902 
10903 /* Line 1806 of yacc.c  */
10904 #line 4670 "parse.y"
10905     {
10906                     /*%%%*/
10907                         NODE *kws = (yyvsp[(1) - (3)].node);
10908 
10909                         while (kws->nd_next) {
10910                             kws = kws->nd_next;
10911                         }
10912                         kws->nd_next = (yyvsp[(3) - (3)].node);
10913                         (yyval.node) = (yyvsp[(1) - (3)].node);
10914                     /*%
10915                         $$ = rb_ary_push($1, $3);
10916                     %*/
10917                     }
10918     break;
10919 
10920   case 570:
10921 
10922 /* Line 1806 of yacc.c  */
10923 #line 4687 "parse.y"
10924     {
10925                     /*%%%*/
10926                         (yyval.node) = (yyvsp[(1) - (1)].node);
10927                     /*%
10928                         $$ = rb_ary_new3(1, $1);
10929                     %*/
10930                     }
10931     break;
10932 
10933   case 571:
10934 
10935 /* Line 1806 of yacc.c  */
10936 #line 4695 "parse.y"
10937     {
10938                     /*%%%*/
10939                         NODE *kws = (yyvsp[(1) - (3)].node);
10940 
10941                         while (kws->nd_next) {
10942                             kws = kws->nd_next;
10943                         }
10944                         kws->nd_next = (yyvsp[(3) - (3)].node);
10945                         (yyval.node) = (yyvsp[(1) - (3)].node);
10946                     /*%
10947                         $$ = rb_ary_push($1, $3);
10948                     %*/
10949                     }
10950     break;
10951 
10952   case 574:
10953 
10954 /* Line 1806 of yacc.c  */
10955 #line 4715 "parse.y"
10956     {
10957                         shadowing_lvar(get_id((yyvsp[(2) - (2)].id)));
10958                         (yyval.id) = (yyvsp[(2) - (2)].id);
10959                     }
10960     break;
10961 
10962   case 575:
10963 
10964 /* Line 1806 of yacc.c  */
10965 #line 4720 "parse.y"
10966     {
10967                         (yyval.id) = internal_id();
10968                     }
10969     break;
10970 
10971   case 576:
10972 
10973 /* Line 1806 of yacc.c  */
10974 #line 4726 "parse.y"
10975     {
10976                         arg_var(get_id((yyvsp[(1) - (3)].id)));
10977                         (yyval.node) = assignable((yyvsp[(1) - (3)].id), (yyvsp[(3) - (3)].node));
10978                     /*%%%*/
10979                         (yyval.node) = NEW_OPT_ARG(0, (yyval.node));
10980                     /*%
10981                         $$ = rb_assoc_new($$, $3);
10982                     %*/
10983                     }
10984     break;
10985 
10986   case 577:
10987 
10988 /* Line 1806 of yacc.c  */
10989 #line 4738 "parse.y"
10990     {
10991                         arg_var(get_id((yyvsp[(1) - (3)].id)));
10992                         (yyval.node) = assignable((yyvsp[(1) - (3)].id), (yyvsp[(3) - (3)].node));
10993                     /*%%%*/
10994                         (yyval.node) = NEW_OPT_ARG(0, (yyval.node));
10995                     /*%
10996                         $$ = rb_assoc_new($$, $3);
10997                     %*/
10998                     }
10999     break;
11000 
11001   case 578:
11002 
11003 /* Line 1806 of yacc.c  */
11004 #line 4750 "parse.y"
11005     {
11006                     /*%%%*/
11007                         (yyval.node) = (yyvsp[(1) - (1)].node);
11008                     /*%
11009                         $$ = rb_ary_new3(1, $1);
11010                     %*/
11011                     }
11012     break;
11013 
11014   case 579:
11015 
11016 /* Line 1806 of yacc.c  */
11017 #line 4758 "parse.y"
11018     {
11019                     /*%%%*/
11020                         NODE *opts = (yyvsp[(1) - (3)].node);
11021 
11022                         while (opts->nd_next) {
11023                             opts = opts->nd_next;
11024                         }
11025                         opts->nd_next = (yyvsp[(3) - (3)].node);
11026                         (yyval.node) = (yyvsp[(1) - (3)].node);
11027                     /*%
11028                         $$ = rb_ary_push($1, $3);
11029                     %*/
11030                     }
11031     break;
11032 
11033   case 580:
11034 
11035 /* Line 1806 of yacc.c  */
11036 #line 4774 "parse.y"
11037     {
11038                     /*%%%*/
11039                         (yyval.node) = (yyvsp[(1) - (1)].node);
11040                     /*%
11041                         $$ = rb_ary_new3(1, $1);
11042                     %*/
11043                     }
11044     break;
11045 
11046   case 581:
11047 
11048 /* Line 1806 of yacc.c  */
11049 #line 4782 "parse.y"
11050     {
11051                     /*%%%*/
11052                         NODE *opts = (yyvsp[(1) - (3)].node);
11053 
11054                         while (opts->nd_next) {
11055                             opts = opts->nd_next;
11056                         }
11057                         opts->nd_next = (yyvsp[(3) - (3)].node);
11058                         (yyval.node) = (yyvsp[(1) - (3)].node);
11059                     /*%
11060                         $$ = rb_ary_push($1, $3);
11061                     %*/
11062                     }
11063     break;
11064 
11065   case 584:
11066 
11067 /* Line 1806 of yacc.c  */
11068 #line 4802 "parse.y"
11069     {
11070                     /*%%%*/
11071                         if (!is_local_id((yyvsp[(2) - (2)].id)))
11072                             yyerror("rest argument must be local variable");
11073                     /*% %*/
11074                         arg_var(shadowing_lvar(get_id((yyvsp[(2) - (2)].id))));
11075                     /*%%%*/
11076                         (yyval.id) = (yyvsp[(2) - (2)].id);
11077                     /*%
11078                         $$ = dispatch1(rest_param, $2);
11079                     %*/
11080                     }
11081     break;
11082 
11083   case 585:
11084 
11085 /* Line 1806 of yacc.c  */
11086 #line 4815 "parse.y"
11087     {
11088                     /*%%%*/
11089                         (yyval.id) = internal_id();
11090                         arg_var((yyval.id));
11091                     /*%
11092                         $$ = dispatch1(rest_param, Qnil);
11093                     %*/
11094                     }
11095     break;
11096 
11097   case 588:
11098 
11099 /* Line 1806 of yacc.c  */
11100 #line 4830 "parse.y"
11101     {
11102                     /*%%%*/
11103                         if (!is_local_id((yyvsp[(2) - (2)].id)))
11104                             yyerror("block argument must be local variable");
11105                         else if (!dyna_in_block() && local_id((yyvsp[(2) - (2)].id)))
11106                             yyerror("duplicated block argument name");
11107                     /*% %*/
11108                         arg_var(shadowing_lvar(get_id((yyvsp[(2) - (2)].id))));
11109                     /*%%%*/
11110                         (yyval.id) = (yyvsp[(2) - (2)].id);
11111                     /*%
11112                         $$ = dispatch1(blockarg, $2);
11113                     %*/
11114                     }
11115     break;
11116 
11117   case 589:
11118 
11119 /* Line 1806 of yacc.c  */
11120 #line 4847 "parse.y"
11121     {
11122                         (yyval.id) = (yyvsp[(2) - (2)].id);
11123                     }
11124     break;
11125 
11126   case 590:
11127 
11128 /* Line 1806 of yacc.c  */
11129 #line 4851 "parse.y"
11130     {
11131                     /*%%%*/
11132                         (yyval.id) = 0;
11133                     /*%
11134                         $$ = Qundef;
11135                     %*/
11136                     }
11137     break;
11138 
11139   case 591:
11140 
11141 /* Line 1806 of yacc.c  */
11142 #line 4861 "parse.y"
11143     {
11144                     /*%%%*/
11145                         value_expr((yyvsp[(1) - (1)].node));
11146                         (yyval.node) = (yyvsp[(1) - (1)].node);
11147                         if (!(yyval.node)) (yyval.node) = NEW_NIL();
11148                     /*%
11149                         $$ = $1;
11150                     %*/
11151                     }
11152     break;
11153 
11154   case 592:
11155 
11156 /* Line 1806 of yacc.c  */
11157 #line 4870 "parse.y"
11158     {lex_state = EXPR_BEG;}
11159     break;
11160 
11161   case 593:
11162 
11163 /* Line 1806 of yacc.c  */
11164 #line 4871 "parse.y"
11165     {
11166                     /*%%%*/
11167                         if ((yyvsp[(3) - (4)].node) == 0) {
11168                             yyerror("can't define singleton method for ().");
11169                         }
11170                         else {
11171                             switch (nd_type((yyvsp[(3) - (4)].node))) {
11172                               case NODE_STR:
11173                               case NODE_DSTR:
11174                               case NODE_XSTR:
11175                               case NODE_DXSTR:
11176                               case NODE_DREGX:
11177                               case NODE_LIT:
11178                               case NODE_ARRAY:
11179                               case NODE_ZARRAY:
11180                                 yyerror("can't define singleton method for literals");
11181                               default:
11182                                 value_expr((yyvsp[(3) - (4)].node));
11183                                 break;
11184                             }
11185                         }
11186                         (yyval.node) = (yyvsp[(3) - (4)].node);
11187                     /*%
11188                         $$ = dispatch1(paren, $3);
11189                     %*/
11190                     }
11191     break;
11192 
11193   case 595:
11194 
11195 /* Line 1806 of yacc.c  */
11196 #line 4901 "parse.y"
11197     {
11198                     /*%%%*/
11199                         (yyval.node) = (yyvsp[(1) - (2)].node);
11200                     /*%
11201                         $$ = dispatch1(assoclist_from_args, $1);
11202                     %*/
11203                     }
11204     break;
11205 
11206   case 597:
11207 
11208 /* Line 1806 of yacc.c  */
11209 #line 4918 "parse.y"
11210     {
11211                     /*%%%*/
11212                         (yyval.node) = list_concat((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
11213                     /*%
11214                         $$ = rb_ary_push($1, $3);
11215                     %*/
11216                     }
11217     break;
11218 
11219   case 598:
11220 
11221 /* Line 1806 of yacc.c  */
11222 #line 4928 "parse.y"
11223     {
11224                     /*%%%*/
11225                         if (nd_type((yyvsp[(1) - (3)].node)) == NODE_STR) {
11226                             nd_set_type((yyvsp[(1) - (3)].node), NODE_LIT);
11227                             (yyvsp[(1) - (3)].node)->nd_lit = rb_fstring((yyvsp[(1) - (3)].node)->nd_lit);
11228                         }
11229                         (yyval.node) = list_append(NEW_LIST((yyvsp[(1) - (3)].node)), (yyvsp[(3) - (3)].node));
11230                     /*%
11231                         $$ = dispatch2(assoc_new, $1, $3);
11232                     %*/
11233                     }
11234     break;
11235 
11236   case 599:
11237 
11238 /* Line 1806 of yacc.c  */
11239 #line 4940 "parse.y"
11240     {
11241                     /*%%%*/
11242                         (yyval.node) = list_append(NEW_LIST(NEW_LIT(ID2SYM((yyvsp[(1) - (2)].id)))), (yyvsp[(2) - (2)].node));
11243                     /*%
11244                         $$ = dispatch2(assoc_new, $1, $2);
11245                     %*/
11246                     }
11247     break;
11248 
11249   case 600:
11250 
11251 /* Line 1806 of yacc.c  */
11252 #line 4948 "parse.y"
11253     {
11254                     /*%%%*/
11255                         (yyval.node) = list_append(NEW_LIST(0), (yyvsp[(2) - (2)].node));
11256                     /*%
11257                         $$ = dispatch1(assoc_splat, $2);
11258                     %*/
11259                     }
11260     break;
11261 
11262   case 622:
11263 
11264 /* Line 1806 of yacc.c  */
11265 #line 5006 "parse.y"
11266     {yyerrok;}
11267     break;
11268 
11269   case 625:
11270 
11271 /* Line 1806 of yacc.c  */
11272 #line 5011 "parse.y"
11273     {yyerrok;}
11274     break;
11275 
11276   case 626:
11277 
11278 /* Line 1806 of yacc.c  */
11279 #line 5015 "parse.y"
11280     {
11281                     /*%%%*/
11282                         (yyval.node) = 0;
11283                     /*%
11284                         $$ = Qundef;
11285                     %*/
11286                     }
11287     break;
11288 
11289 
11290 
11291 /* Line 1806 of yacc.c  */
11292 #line 11291 "parse.c"
11293       default: break;
11294     }
11295   /* User semantic actions sometimes alter yychar, and that requires
11296      that yytoken be updated with the new translation.  We take the
11297      approach of translating immediately before every use of yytoken.
11298      One alternative is translating here after every semantic action,
11299      but that translation would be missed if the semantic action invokes
11300      YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
11301      if it invokes YYBACKUP.  In the case of YYABORT or YYACCEPT, an
11302      incorrect destructor might then be invoked immediately.  In the
11303      case of YYERROR or YYBACKUP, subsequent parser actions might lead
11304      to an incorrect destructor call or verbose syntax error message
11305      before the lookahead is translated.  */
11306   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
11307 
11308   YYPOPSTACK (yylen);
11309   yylen = 0;
11310   YY_STACK_PRINT (yyss, yyssp);
11311 
11312   *++yyvsp = yyval;
11313 
11314   /* Now `shift' the result of the reduction.  Determine what state
11315      that goes to, based on the state we popped back to and the rule
11316      number reduced by.  */
11317 
11318   yyn = yyr1[yyn];
11319 
11320   yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
11321   if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
11322     yystate = yytable[yystate];
11323   else
11324     yystate = yydefgoto[yyn - YYNTOKENS];
11325 
11326   goto yynewstate;
11327 
11328 
11329 /*------------------------------------.
11330 | yyerrlab -- here on detecting error |
11331 `------------------------------------*/
11332 yyerrlab:
11333   /* Make sure we have latest lookahead translation.  See comments at
11334      user semantic actions for why this is necessary.  */
11335   yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar);
11336 
11337   /* If not already recovering from an error, report this error.  */
11338   if (!yyerrstatus)
11339     {
11340       ++yynerrs;
11341 #if ! YYERROR_VERBOSE
11342       parser_yyerror (parser, YY_("syntax error"));
11343 #else
11344 # define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \
11345                                         yyssp, yytoken)
11346       {
11347         char const *yymsgp = YY_("syntax error");
11348         int yysyntax_error_status;
11349         yysyntax_error_status = YYSYNTAX_ERROR;
11350         if (yysyntax_error_status == 0)
11351           yymsgp = yymsg;
11352         else if (yysyntax_error_status == 1)
11353           {
11354             if (yymsg != yymsgbuf)
11355               YYSTACK_FREE (yymsg);
11356             yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc);
11357             if (!yymsg)
11358               {
11359                 yymsg = yymsgbuf;
11360                 yymsg_alloc = sizeof yymsgbuf;
11361                 yysyntax_error_status = 2;
11362               }
11363             else
11364               {
11365                 yysyntax_error_status = YYSYNTAX_ERROR;
11366                 yymsgp = yymsg;
11367               }
11368           }
11369         parser_yyerror (parser, yymsgp);
11370         if (yysyntax_error_status == 2)
11371           goto yyexhaustedlab;
11372       }
11373 # undef YYSYNTAX_ERROR
11374 #endif
11375     }
11376 
11377 
11378 
11379   if (yyerrstatus == 3)
11380     {
11381       /* If just tried and failed to reuse lookahead token after an
11382          error, discard it.  */
11383 
11384       if (yychar <= YYEOF)
11385         {
11386           /* Return failure if at end of input.  */
11387           if (yychar == YYEOF)
11388             YYABORT;
11389         }
11390       else
11391         {
11392           yydestruct ("Error: discarding",
11393                       yytoken, &yylval, parser);
11394           yychar = YYEMPTY;
11395         }
11396     }
11397 
11398   /* Else will try to reuse lookahead token after shifting the error
11399      token.  */
11400   goto yyerrlab1;
11401 
11402 
11403 /*---------------------------------------------------.
11404 | yyerrorlab -- error raised explicitly by YYERROR.  |
11405 `---------------------------------------------------*/
11406 yyerrorlab:
11407 
11408   /* Pacify compilers like GCC when the user code never invokes
11409      YYERROR and the label yyerrorlab therefore never appears in user
11410      code.  */
11411   if (/*CONSTCOND*/ 0)
11412      goto yyerrorlab;
11413 
11414   /* Do not reclaim the symbols of the rule which action triggered
11415      this YYERROR.  */
11416   YYPOPSTACK (yylen);
11417   yylen = 0;
11418   YY_STACK_PRINT (yyss, yyssp);
11419   yystate = *yyssp;
11420   goto yyerrlab1;
11421 
11422 
11423 /*-------------------------------------------------------------.
11424 | yyerrlab1 -- common code for both syntax error and YYERROR.  |
11425 `-------------------------------------------------------------*/
11426 yyerrlab1:
11427   yyerrstatus = 3;      /* Each real token shifted decrements this.  */
11428 
11429   for (;;)
11430     {
11431       yyn = yypact[yystate];
11432       if (!yypact_value_is_default (yyn))
11433         {
11434           yyn += YYTERROR;
11435           if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
11436             {
11437               yyn = yytable[yyn];
11438               if (0 < yyn)
11439                 break;
11440             }
11441         }
11442 
11443       /* Pop the current state because it cannot handle the error token.  */
11444       if (yyssp == yyss)
11445         YYABORT;
11446 
11447 
11448       yydestruct ("Error: popping",
11449                   yystos[yystate], yyvsp, parser);
11450       YYPOPSTACK (1);
11451       yystate = *yyssp;
11452       YY_STACK_PRINT (yyss, yyssp);
11453     }
11454 
11455   *++yyvsp = yylval;
11456 
11457 
11458   /* Shift the error token.  */
11459   YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
11460 
11461   yystate = yyn;
11462   goto yynewstate;
11463 
11464 
11465 /*-------------------------------------.
11466 | yyacceptlab -- YYACCEPT comes here.  |
11467 `-------------------------------------*/
11468 yyacceptlab:
11469   yyresult = 0;
11470   goto yyreturn;
11471 
11472 /*-----------------------------------.
11473 | yyabortlab -- YYABORT comes here.  |
11474 `-----------------------------------*/
11475 yyabortlab:
11476   yyresult = 1;
11477   goto yyreturn;
11478 
11479 #if !defined(yyoverflow) || YYERROR_VERBOSE
11480 /*-------------------------------------------------.
11481 | yyexhaustedlab -- memory exhaustion comes here.  |
11482 `-------------------------------------------------*/
11483 yyexhaustedlab:
11484   parser_yyerror (parser, YY_("memory exhausted"));
11485   yyresult = 2;
11486   /* Fall through.  */
11487 #endif
11488 
11489 yyreturn:
11490   if (yychar != YYEMPTY)
11491     {
11492       /* Make sure we have latest lookahead translation.  See comments at
11493          user semantic actions for why this is necessary.  */
11494       yytoken = YYTRANSLATE (yychar);
11495       yydestruct ("Cleanup: discarding lookahead",
11496                   yytoken, &yylval, parser);
11497     }
11498   /* Do not reclaim the symbols of the rule which action triggered
11499      this YYABORT or YYACCEPT.  */
11500   YYPOPSTACK (yylen);
11501   YY_STACK_PRINT (yyss, yyssp);
11502   while (yyssp != yyss)
11503     {
11504       yydestruct ("Cleanup: popping",
11505                   yystos[*yyssp], yyvsp, parser);
11506       YYPOPSTACK (1);
11507     }
11508 #ifndef yyoverflow
11509   if (yyss != yyssa)
11510     YYSTACK_FREE (yyss);
11511 #endif
11512 #if YYERROR_VERBOSE
11513   if (yymsg != yymsgbuf)
11514     YYSTACK_FREE (yymsg);
11515 #endif
11516   /* Make sure YYID is used.  */
11517   return YYID (yyresult);
11518 }
11519 
11520 
11521 
11522 /* Line 2067 of yacc.c  */
11523 #line 5023 "parse.y"
11524 
11525 # undef parser
11526 # undef yylex
11527 # undef yylval
11528 # define yylval  (*((YYSTYPE*)(parser->parser_yylval)))
11529 
11530 static int parser_regx_options(struct parser_params*);
11531 static int parser_tokadd_string(struct parser_params*,int,int,int,long*,rb_encoding**);
11532 static void parser_tokaddmbc(struct parser_params *parser, int c, rb_encoding *enc);
11533 static int parser_parse_string(struct parser_params*,NODE*);
11534 static int parser_here_document(struct parser_params*,NODE*);
11535 
11536 
11537 # define nextc()                      parser_nextc(parser)
11538 # define pushback(c)                  parser_pushback(parser, (c))
11539 # define newtok()                     parser_newtok(parser)
11540 # define tokspace(n)                  parser_tokspace(parser, (n))
11541 # define tokadd(c)                    parser_tokadd(parser, (c))
11542 # define tok_hex(numlen)              parser_tok_hex(parser, (numlen))
11543 # define read_escape(flags,e)         parser_read_escape(parser, (flags), (e))
11544 # define tokadd_escape(e)             parser_tokadd_escape(parser, (e))
11545 # define regx_options()               parser_regx_options(parser)
11546 # define tokadd_string(f,t,p,n,e)     parser_tokadd_string(parser,(f),(t),(p),(n),(e))
11547 # define parse_string(n)              parser_parse_string(parser,(n))
11548 # define tokaddmbc(c, enc)            parser_tokaddmbc(parser, (c), (enc))
11549 # define here_document(n)             parser_here_document(parser,(n))
11550 # define heredoc_identifier()         parser_heredoc_identifier(parser)
11551 # define heredoc_restore(n)           parser_heredoc_restore(parser,(n))
11552 # define whole_match_p(e,l,i)         parser_whole_match_p(parser,(e),(l),(i))
11553 # define number_literal_suffix(f)     parser_number_literal_suffix(parser, (f))
11554 # define set_number_literal(v, t, f)  parser_set_number_literal(parser, (v), (t), (f))
11555 # define set_integer_literal(v, f)    parser_set_integer_literal(parser, (v), (f))
11556 
11557 #ifndef RIPPER
11558 # define set_yylval_str(x) (yylval.node = NEW_STR(x))
11559 # define set_yylval_num(x) (yylval.num = (x))
11560 # define set_yylval_id(x)  (yylval.id = (x))
11561 # define set_yylval_name(x)  (yylval.id = (x))
11562 # define set_yylval_literal(x) (yylval.node = NEW_LIT(x))
11563 # define set_yylval_node(x) (yylval.node = (x))
11564 # define yylval_id() (yylval.id)
11565 #else
11566 static inline VALUE
11567 ripper_yylval_id(ID x)
11568 {
11569     return (VALUE)NEW_LASGN(x, ID2SYM(x));
11570 }
11571 # define set_yylval_str(x) (void)(x)
11572 # define set_yylval_num(x) (void)(x)
11573 # define set_yylval_id(x)  (void)(x)
11574 # define set_yylval_name(x) (void)(yylval.val = ripper_yylval_id(x))
11575 # define set_yylval_literal(x) (void)(x)
11576 # define set_yylval_node(x) (void)(x)
11577 # define yylval_id() yylval.id
11578 #endif
11579 
11580 #ifndef RIPPER
11581 #define ripper_flush(p) (void)(p)
11582 #else
11583 #define ripper_flush(p) ((p)->tokp = (p)->parser_lex_p)
11584 
11585 #define yylval_rval (*(RB_TYPE_P(yylval.val, T_NODE) ? &yylval.node->nd_rval : &yylval.val))
11586 
11587 static int
11588 ripper_has_scan_event(struct parser_params *parser)
11589 {
11590 
11591     if (lex_p < parser->tokp) rb_raise(rb_eRuntimeError, "lex_p < tokp");
11592     return lex_p > parser->tokp;
11593 }
11594 
11595 static VALUE
11596 ripper_scan_event_val(struct parser_params *parser, int t)
11597 {
11598     VALUE str = STR_NEW(parser->tokp, lex_p - parser->tokp);
11599     VALUE rval = ripper_dispatch1(parser, ripper_token2eventid(t), str);
11600     ripper_flush(parser);
11601     return rval;
11602 }
11603 
11604 static void
11605 ripper_dispatch_scan_event(struct parser_params *parser, int t)
11606 {
11607     if (!ripper_has_scan_event(parser)) return;
11608     yylval_rval = ripper_scan_event_val(parser, t);
11609 }
11610 
11611 static void
11612 ripper_dispatch_ignored_scan_event(struct parser_params *parser, int t)
11613 {
11614     if (!ripper_has_scan_event(parser)) return;
11615     (void)ripper_scan_event_val(parser, t);
11616 }
11617 
11618 static void
11619 ripper_dispatch_delayed_token(struct parser_params *parser, int t)
11620 {
11621     int saved_line = ruby_sourceline;
11622     const char *saved_tokp = parser->tokp;
11623 
11624     ruby_sourceline = parser->delayed_line;
11625     parser->tokp = lex_pbeg + parser->delayed_col;
11626     yylval_rval = ripper_dispatch1(parser, ripper_token2eventid(t), parser->delayed);
11627     parser->delayed = Qnil;
11628     ruby_sourceline = saved_line;
11629     parser->tokp = saved_tokp;
11630 }
11631 #endif /* RIPPER */
11632 
11633 #include "ruby/regex.h"
11634 #include "ruby/util.h"
11635 
11636 /* We remove any previous definition of `SIGN_EXTEND_CHAR',
11637    since ours (we hope) works properly with all combinations of
11638    machines, compilers, `char' and `unsigned char' argument types.
11639    (Per Bothner suggested the basic approach.)  */
11640 #undef SIGN_EXTEND_CHAR
11641 #if __STDC__
11642 # define SIGN_EXTEND_CHAR(c) ((signed char)(c))
11643 #else  /* not __STDC__ */
11644 /* As in Harbison and Steele.  */
11645 # define SIGN_EXTEND_CHAR(c) ((((unsigned char)(c)) ^ 128) - 128)
11646 #endif
11647 
11648 #define parser_encoding_name()  (current_enc->name)
11649 #define parser_mbclen()  mbclen((lex_p-1),lex_pend,current_enc)
11650 #define parser_precise_mbclen()  rb_enc_precise_mbclen((lex_p-1),lex_pend,current_enc)
11651 #define is_identchar(p,e,enc) (rb_enc_isalnum((unsigned char)(*(p)),(enc)) || (*(p)) == '_' || !ISASCII(*(p)))
11652 #define parser_is_identchar() (!parser->eofp && is_identchar((lex_p-1),lex_pend,current_enc))
11653 
11654 #define parser_isascii() ISASCII(*(lex_p-1))
11655 
11656 #ifndef RIPPER
11657 static int
11658 token_info_get_column(struct parser_params *parser, const char *token)
11659 {
11660     int column = 1;
11661     const char *p, *pend = lex_p - strlen(token);
11662     for (p = lex_pbeg; p < pend; p++) {
11663         if (*p == '\t') {
11664             column = (((column - 1) / 8) + 1) * 8;
11665         }
11666         column++;
11667     }
11668     return column;
11669 }
11670 
11671 static int
11672 token_info_has_nonspaces(struct parser_params *parser, const char *token)
11673 {
11674     const char *p, *pend = lex_p - strlen(token);
11675     for (p = lex_pbeg; p < pend; p++) {
11676         if (*p != ' ' && *p != '\t') {
11677             return 1;
11678         }
11679     }
11680     return 0;
11681 }
11682 
11683 #undef token_info_push
11684 static void
11685 token_info_push(struct parser_params *parser, const char *token)
11686 {
11687     token_info *ptinfo;
11688 
11689     if (!parser->parser_token_info_enabled) return;
11690     ptinfo = ALLOC(token_info);
11691     ptinfo->token = token;
11692     ptinfo->linenum = ruby_sourceline;
11693     ptinfo->column = token_info_get_column(parser, token);
11694     ptinfo->nonspc = token_info_has_nonspaces(parser, token);
11695     ptinfo->next = parser->parser_token_info;
11696 
11697     parser->parser_token_info = ptinfo;
11698 }
11699 
11700 #undef token_info_pop
11701 static void
11702 token_info_pop(struct parser_params *parser, const char *token)
11703 {
11704     int linenum;
11705     token_info *ptinfo = parser->parser_token_info;
11706 
11707     if (!ptinfo) return;
11708     parser->parser_token_info = ptinfo->next;
11709     if (token_info_get_column(parser, token) == ptinfo->column) { /* OK */
11710         goto finish;
11711     }
11712     linenum = ruby_sourceline;
11713     if (linenum == ptinfo->linenum) { /* SKIP */
11714         goto finish;
11715     }
11716     if (token_info_has_nonspaces(parser, token) || ptinfo->nonspc) { /* SKIP */
11717         goto finish;
11718     }
11719     if (parser->parser_token_info_enabled) {
11720         rb_compile_warn(ruby_sourcefile, linenum,
11721                         "mismatched indentations at '%s' with '%s' at %d",
11722                         token, ptinfo->token, ptinfo->linenum);
11723     }
11724 
11725   finish:
11726     xfree(ptinfo);
11727 }
11728 #endif  /* RIPPER */
11729 
11730 static int
11731 parser_yyerror(struct parser_params *parser, const char *msg)
11732 {
11733 #ifndef RIPPER
11734     const int max_line_margin = 30;
11735     const char *p, *pe;
11736     char *buf;
11737     long len;
11738     int i;
11739 
11740     compile_error(PARSER_ARG "%s", msg);
11741     p = lex_p;
11742     while (lex_pbeg <= p) {
11743         if (*p == '\n') break;
11744         p--;
11745     }
11746     p++;
11747 
11748     pe = lex_p;
11749     while (pe < lex_pend) {
11750         if (*pe == '\n') break;
11751         pe++;
11752     }
11753 
11754     len = pe - p;
11755     if (len > 4) {
11756         char *p2;
11757         const char *pre = "", *post = "";
11758 
11759         if (len > max_line_margin * 2 + 10) {
11760             if (lex_p - p > max_line_margin) {
11761                 p = rb_enc_prev_char(p, lex_p - max_line_margin, pe, rb_enc_get(lex_lastline));
11762                 pre = "...";
11763             }
11764             if (pe - lex_p > max_line_margin) {
11765                 pe = rb_enc_prev_char(lex_p, lex_p + max_line_margin, pe, rb_enc_get(lex_lastline));
11766                 post = "...";
11767             }
11768             len = pe - p;
11769         }
11770         buf = ALLOCA_N(char, len+2);
11771         MEMCPY(buf, p, char, len);
11772         buf[len] = '\0';
11773         rb_compile_error_with_enc(NULL, 0, (void *)current_enc, "%s%s%s", pre, buf, post);
11774 
11775         i = (int)(lex_p - p);
11776         p2 = buf; pe = buf + len;
11777 
11778         while (p2 < pe) {
11779             if (*p2 != '\t') *p2 = ' ';
11780             p2++;
11781         }
11782         buf[i] = '^';
11783         buf[i+1] = '\0';
11784         rb_compile_error_append("%s%s", pre, buf);
11785     }
11786 #else
11787     dispatch1(parse_error, STR_NEW2(msg));
11788 #endif /* !RIPPER */
11789     return 0;
11790 }
11791 
11792 static void parser_prepare(struct parser_params *parser);
11793 
11794 #ifndef RIPPER
11795 static VALUE
11796 debug_lines(VALUE fname)
11797 {
11798     ID script_lines;
11799     CONST_ID(script_lines, "SCRIPT_LINES__");
11800     if (rb_const_defined_at(rb_cObject, script_lines)) {
11801         VALUE hash = rb_const_get_at(rb_cObject, script_lines);
11802         if (RB_TYPE_P(hash, T_HASH)) {
11803             VALUE lines = rb_ary_new();
11804             rb_hash_aset(hash, fname, lines);
11805             return lines;
11806         }
11807     }
11808     return 0;
11809 }
11810 
11811 static VALUE
11812 coverage(VALUE fname, int n)
11813 {
11814     VALUE coverages = rb_get_coverages();
11815     if (RTEST(coverages) && RBASIC(coverages)->klass == 0) {
11816         VALUE lines = rb_ary_new2(n);
11817         int i;
11818         RBASIC_CLEAR_CLASS(lines);
11819         for (i = 0; i < n; i++) RARRAY_ASET(lines, i, Qnil);
11820         RARRAY(lines)->as.heap.len = n;
11821         rb_hash_aset(coverages, fname, lines);
11822         return lines;
11823     }
11824     return 0;
11825 }
11826 
11827 static int
11828 e_option_supplied(struct parser_params *parser)
11829 {
11830     return strcmp(ruby_sourcefile, "-e") == 0;
11831 }
11832 
11833 static VALUE
11834 yycompile0(VALUE arg)
11835 {
11836     int n;
11837     NODE *tree;
11838     struct parser_params *parser = (struct parser_params *)arg;
11839 
11840     if (!compile_for_eval && rb_safe_level() == 0) {
11841         ruby_debug_lines = debug_lines(ruby_sourcefile_string);
11842         if (ruby_debug_lines && ruby_sourceline > 0) {
11843             VALUE str = STR_NEW0();
11844             n = ruby_sourceline;
11845             do {
11846                 rb_ary_push(ruby_debug_lines, str);
11847             } while (--n);
11848         }
11849 
11850         if (!e_option_supplied(parser)) {
11851             ruby_coverage = coverage(ruby_sourcefile_string, ruby_sourceline);
11852         }
11853     }
11854     parser->last_cr_line = ruby_sourceline - 1;
11855 
11856     parser_prepare(parser);
11857     deferred_nodes = 0;
11858 #ifndef RIPPER
11859     parser->parser_token_info_enabled = !compile_for_eval && RTEST(ruby_verbose);
11860 #endif
11861 #ifndef RIPPER
11862     if (RUBY_DTRACE_PARSE_BEGIN_ENABLED()) {
11863         RUBY_DTRACE_PARSE_BEGIN(parser->parser_ruby_sourcefile,
11864                                 parser->parser_ruby_sourceline);
11865     }
11866 #endif
11867     n = yyparse((void*)parser);
11868 #ifndef RIPPER
11869     if (RUBY_DTRACE_PARSE_END_ENABLED()) {
11870         RUBY_DTRACE_PARSE_END(parser->parser_ruby_sourcefile,
11871                               parser->parser_ruby_sourceline);
11872     }
11873 #endif
11874     ruby_debug_lines = 0;
11875     ruby_coverage = 0;
11876     compile_for_eval = 0;
11877 
11878     lex_strterm = 0;
11879     lex_p = lex_pbeg = lex_pend = 0;
11880     lex_lastline = lex_nextline = 0;
11881     if (parser->nerr) {
11882         return 0;
11883     }
11884     tree = ruby_eval_tree;
11885     if (!tree) {
11886         tree = NEW_NIL();
11887     }
11888     else if (ruby_eval_tree_begin) {
11889         tree->nd_body = NEW_PRELUDE(ruby_eval_tree_begin, tree->nd_body);
11890     }
11891     return (VALUE)tree;
11892 }
11893 
11894 static NODE*
11895 yycompile(struct parser_params *parser, VALUE fname, int line)
11896 {
11897     ruby_sourcefile_string = rb_str_new_frozen(fname);
11898     ruby_sourcefile = RSTRING_PTR(fname);
11899     ruby_sourceline = line - 1;
11900     return (NODE *)rb_suppress_tracing(yycompile0, (VALUE)parser);
11901 }
11902 #endif /* !RIPPER */
11903 
11904 static rb_encoding *
11905 must_be_ascii_compatible(VALUE s)
11906 {
11907     rb_encoding *enc = rb_enc_get(s);
11908     if (!rb_enc_asciicompat(enc)) {
11909         rb_raise(rb_eArgError, "invalid source encoding");
11910     }
11911     return enc;
11912 }
11913 
11914 static VALUE
11915 lex_get_str(struct parser_params *parser, VALUE s)
11916 {
11917     char *beg, *end, *pend;
11918     rb_encoding *enc = must_be_ascii_compatible(s);
11919 
11920     beg = RSTRING_PTR(s);
11921     if (lex_gets_ptr) {
11922         if (RSTRING_LEN(s) == lex_gets_ptr) return Qnil;
11923         beg += lex_gets_ptr;
11924     }
11925     pend = RSTRING_PTR(s) + RSTRING_LEN(s);
11926     end = beg;
11927     while (end < pend) {
11928         if (*end++ == '\n') break;
11929     }
11930     lex_gets_ptr = end - RSTRING_PTR(s);
11931     return rb_enc_str_new(beg, end - beg, enc);
11932 }
11933 
11934 static VALUE
11935 lex_getline(struct parser_params *parser)
11936 {
11937     VALUE line = (*parser->parser_lex_gets)(parser, parser->parser_lex_input);
11938     if (NIL_P(line)) return line;
11939     must_be_ascii_compatible(line);
11940 #ifndef RIPPER
11941     if (ruby_debug_lines) {
11942         rb_enc_associate(line, current_enc);
11943         rb_ary_push(ruby_debug_lines, line);
11944     }
11945     if (ruby_coverage) {
11946         rb_ary_push(ruby_coverage, Qnil);
11947     }
11948 #endif
11949     return line;
11950 }
11951 
11952 #ifdef RIPPER
11953 static rb_data_type_t parser_data_type;
11954 #else
11955 static const rb_data_type_t parser_data_type;
11956 
11957 static NODE*
11958 parser_compile_string(volatile VALUE vparser, VALUE fname, VALUE s, int line)
11959 {
11960     struct parser_params *parser;
11961     NODE *node;
11962 
11963     TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
11964     lex_gets = lex_get_str;
11965     lex_gets_ptr = 0;
11966     lex_input = s;
11967     lex_pbeg = lex_p = lex_pend = 0;
11968     compile_for_eval = rb_parse_in_eval();
11969 
11970     node = yycompile(parser, fname, line);
11971     RB_GC_GUARD(vparser); /* prohibit tail call optimization */
11972 
11973     return node;
11974 }
11975 
11976 NODE*
11977 rb_compile_string(const char *f, VALUE s, int line)
11978 {
11979     must_be_ascii_compatible(s);
11980     return parser_compile_string(rb_parser_new(), rb_filesystem_str_new_cstr(f), s, line);
11981 }
11982 
11983 NODE*
11984 rb_parser_compile_string(volatile VALUE vparser, const char *f, VALUE s, int line)
11985 {
11986     return rb_parser_compile_string_path(vparser, rb_filesystem_str_new_cstr(f), s, line);
11987 }
11988 
11989 NODE*
11990 rb_parser_compile_string_path(volatile VALUE vparser, VALUE f, VALUE s, int line)
11991 {
11992     must_be_ascii_compatible(s);
11993     return parser_compile_string(vparser, f, s, line);
11994 }
11995 
11996 NODE*
11997 rb_compile_cstr(const char *f, const char *s, int len, int line)
11998 {
11999     VALUE str = rb_str_new(s, len);
12000     return parser_compile_string(rb_parser_new(), rb_filesystem_str_new_cstr(f), str, line);
12001 }
12002 
12003 NODE*
12004 rb_parser_compile_cstr(volatile VALUE vparser, const char *f, const char *s, int len, int line)
12005 {
12006     VALUE str = rb_str_new(s, len);
12007     return parser_compile_string(vparser, rb_filesystem_str_new_cstr(f), str, line);
12008 }
12009 
12010 static VALUE
12011 lex_io_gets(struct parser_params *parser, VALUE io)
12012 {
12013     return rb_io_gets(io);
12014 }
12015 
12016 NODE*
12017 rb_compile_file(const char *f, VALUE file, int start)
12018 {
12019     VALUE volatile vparser = rb_parser_new();
12020 
12021     return rb_parser_compile_file(vparser, f, file, start);
12022 }
12023 
12024 NODE*
12025 rb_parser_compile_file(volatile VALUE vparser, const char *f, VALUE file, int start)
12026 {
12027     return rb_parser_compile_file_path(vparser, rb_filesystem_str_new_cstr(f), file, start);
12028 }
12029 
12030 NODE*
12031 rb_parser_compile_file_path(volatile VALUE vparser, VALUE fname, VALUE file, int start)
12032 {
12033     struct parser_params *parser;
12034     NODE *node;
12035 
12036     TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
12037     lex_gets = lex_io_gets;
12038     lex_input = file;
12039     lex_pbeg = lex_p = lex_pend = 0;
12040     compile_for_eval = rb_parse_in_eval();
12041 
12042     node = yycompile(parser, fname, start);
12043     RB_GC_GUARD(vparser); /* prohibit tail call optimization */
12044 
12045     return node;
12046 }
12047 #endif  /* !RIPPER */
12048 
12049 #define STR_FUNC_ESCAPE 0x01
12050 #define STR_FUNC_EXPAND 0x02
12051 #define STR_FUNC_REGEXP 0x04
12052 #define STR_FUNC_QWORDS 0x08
12053 #define STR_FUNC_SYMBOL 0x10
12054 #define STR_FUNC_INDENT 0x20
12055 
12056 enum string_type {
12057     str_squote = (0),
12058     str_dquote = (STR_FUNC_EXPAND),
12059     str_xquote = (STR_FUNC_EXPAND),
12060     str_regexp = (STR_FUNC_REGEXP|STR_FUNC_ESCAPE|STR_FUNC_EXPAND),
12061     str_sword  = (STR_FUNC_QWORDS),
12062     str_dword  = (STR_FUNC_QWORDS|STR_FUNC_EXPAND),
12063     str_ssym   = (STR_FUNC_SYMBOL),
12064     str_dsym   = (STR_FUNC_SYMBOL|STR_FUNC_EXPAND)
12065 };
12066 
12067 static VALUE
12068 parser_str_new(const char *p, long n, rb_encoding *enc, int func, rb_encoding *enc0)
12069 {
12070     VALUE str;
12071 
12072     str = rb_enc_str_new(p, n, enc);
12073     if (!(func & STR_FUNC_REGEXP) && rb_enc_asciicompat(enc)) {
12074         if (rb_enc_str_coderange(str) == ENC_CODERANGE_7BIT) {
12075         }
12076         else if (enc0 == rb_usascii_encoding() && enc != rb_utf8_encoding()) {
12077             rb_enc_associate(str, rb_ascii8bit_encoding());
12078         }
12079     }
12080 
12081     return str;
12082 }
12083 
12084 #define lex_goto_eol(parser) ((parser)->parser_lex_p = (parser)->parser_lex_pend)
12085 #define lex_eol_p() (lex_p >= lex_pend)
12086 #define peek(c) peek_n((c), 0)
12087 #define peek_n(c,n) (lex_p+(n) < lex_pend && (c) == (unsigned char)lex_p[n])
12088 
12089 static inline int
12090 parser_nextc(struct parser_params *parser)
12091 {
12092     int c;
12093 
12094     if (lex_p == lex_pend) {
12095         VALUE v = lex_nextline;
12096         lex_nextline = 0;
12097         if (!v) {
12098             if (parser->eofp)
12099                 return -1;
12100 
12101             if (!lex_input || NIL_P(v = lex_getline(parser))) {
12102                 parser->eofp = Qtrue;
12103                 lex_goto_eol(parser);
12104                 return -1;
12105             }
12106         }
12107         {
12108 #ifdef RIPPER
12109             if (parser->tokp < lex_pend) {
12110                 if (NIL_P(parser->delayed)) {
12111                     parser->delayed = rb_str_buf_new(1024);
12112                     rb_enc_associate(parser->delayed, current_enc);
12113                     rb_str_buf_cat(parser->delayed,
12114                                    parser->tokp, lex_pend - parser->tokp);
12115                     parser->delayed_line = ruby_sourceline;
12116                     parser->delayed_col = (int)(parser->tokp - lex_pbeg);
12117                 }
12118                 else {
12119                     rb_str_buf_cat(parser->delayed,
12120                                    parser->tokp, lex_pend - parser->tokp);
12121                 }
12122             }
12123 #endif
12124             if (heredoc_end > 0) {
12125                 ruby_sourceline = heredoc_end;
12126                 heredoc_end = 0;
12127             }
12128             ruby_sourceline++;
12129             parser->line_count++;
12130             lex_pbeg = lex_p = RSTRING_PTR(v);
12131             lex_pend = lex_p + RSTRING_LEN(v);
12132             ripper_flush(parser);
12133             lex_lastline = v;
12134         }
12135     }
12136     c = (unsigned char)*lex_p++;
12137     if (c == '\r') {
12138         if (peek('\n')) {
12139             lex_p++;
12140             c = '\n';
12141         }
12142         else if (ruby_sourceline > parser->last_cr_line) {
12143             parser->last_cr_line = ruby_sourceline;
12144             rb_compile_warn(ruby_sourcefile, ruby_sourceline, "encountered \\r in middle of line, treated as a mere space");
12145         }
12146     }
12147 
12148     return c;
12149 }
12150 
12151 static void
12152 parser_pushback(struct parser_params *parser, int c)
12153 {
12154     if (c == -1) return;
12155     lex_p--;
12156     if (lex_p > lex_pbeg && lex_p[0] == '\n' && lex_p[-1] == '\r') {
12157         lex_p--;
12158     }
12159 }
12160 
12161 #define was_bol() (lex_p == lex_pbeg + 1)
12162 
12163 #define tokfix() (tokenbuf[tokidx]='\0')
12164 #define tok() tokenbuf
12165 #define toklen() tokidx
12166 #define toklast() (tokidx>0?tokenbuf[tokidx-1]:0)
12167 
12168 static char*
12169 parser_newtok(struct parser_params *parser)
12170 {
12171     tokidx = 0;
12172     tokline = ruby_sourceline;
12173     if (!tokenbuf) {
12174         toksiz = 60;
12175         tokenbuf = ALLOC_N(char, 60);
12176     }
12177     if (toksiz > 4096) {
12178         toksiz = 60;
12179         REALLOC_N(tokenbuf, char, 60);
12180     }
12181     return tokenbuf;
12182 }
12183 
12184 static char *
12185 parser_tokspace(struct parser_params *parser, int n)
12186 {
12187     tokidx += n;
12188 
12189     if (tokidx >= toksiz) {
12190         do {toksiz *= 2;} while (toksiz < tokidx);
12191         REALLOC_N(tokenbuf, char, toksiz);
12192     }
12193     return &tokenbuf[tokidx-n];
12194 }
12195 
12196 static void
12197 parser_tokadd(struct parser_params *parser, int c)
12198 {
12199     tokenbuf[tokidx++] = (char)c;
12200     if (tokidx >= toksiz) {
12201         toksiz *= 2;
12202         REALLOC_N(tokenbuf, char, toksiz);
12203     }
12204 }
12205 
12206 static int
12207 parser_tok_hex(struct parser_params *parser, size_t *numlen)
12208 {
12209     int c;
12210 
12211     c = scan_hex(lex_p, 2, numlen);
12212     if (!*numlen) {
12213         yyerror("invalid hex escape");
12214         return 0;
12215     }
12216     lex_p += *numlen;
12217     return c;
12218 }
12219 
12220 #define tokcopy(n) memcpy(tokspace(n), lex_p - (n), (n))
12221 
12222 /* return value is for ?\u3042 */
12223 static int
12224 parser_tokadd_utf8(struct parser_params *parser, rb_encoding **encp,
12225                    int string_literal, int symbol_literal, int regexp_literal)
12226 {
12227     /*
12228      * If string_literal is true, then we allow multiple codepoints
12229      * in \u{}, and add the codepoints to the current token.
12230      * Otherwise we're parsing a character literal and return a single
12231      * codepoint without adding it
12232      */
12233 
12234     int codepoint;
12235     size_t numlen;
12236 
12237     if (regexp_literal) { tokadd('\\'); tokadd('u'); }
12238 
12239     if (peek('{')) {  /* handle \u{...} form */
12240         do {
12241             if (regexp_literal) { tokadd(*lex_p); }
12242             nextc();
12243             codepoint = scan_hex(lex_p, 6, &numlen);
12244             if (numlen == 0)  {
12245                 yyerror("invalid Unicode escape");
12246                 return 0;
12247             }
12248             if (codepoint > 0x10ffff) {
12249                 yyerror("invalid Unicode codepoint (too large)");
12250                 return 0;
12251             }
12252             lex_p += numlen;
12253             if (regexp_literal) {
12254                 tokcopy((int)numlen);
12255             }
12256             else if (codepoint >= 0x80) {
12257                 *encp = rb_utf8_encoding();
12258                 if (string_literal) tokaddmbc(codepoint, *encp);
12259             }
12260             else if (string_literal) {
12261                 tokadd(codepoint);
12262             }
12263         } while (string_literal && (peek(' ') || peek('\t')));
12264 
12265         if (!peek('}')) {
12266             yyerror("unterminated Unicode escape");
12267             return 0;
12268         }
12269 
12270         if (regexp_literal) { tokadd('}'); }
12271         nextc();
12272     }
12273     else {                      /* handle \uxxxx form */
12274         codepoint = scan_hex(lex_p, 4, &numlen);
12275         if (numlen < 4) {
12276             yyerror("invalid Unicode escape");
12277             return 0;
12278         }
12279         lex_p += 4;
12280         if (regexp_literal) {
12281             tokcopy(4);
12282         }
12283         else if (codepoint >= 0x80) {
12284             *encp = rb_utf8_encoding();
12285             if (string_literal) tokaddmbc(codepoint, *encp);
12286         }
12287         else if (string_literal) {
12288             tokadd(codepoint);
12289         }
12290     }
12291 
12292     return codepoint;
12293 }
12294 
12295 #define ESCAPE_CONTROL 1
12296 #define ESCAPE_META    2
12297 
12298 static int
12299 parser_read_escape(struct parser_params *parser, int flags,
12300                    rb_encoding **encp)
12301 {
12302     int c;
12303     size_t numlen;
12304 
12305     switch (c = nextc()) {
12306       case '\\':        /* Backslash */
12307         return c;
12308 
12309       case 'n': /* newline */
12310         return '\n';
12311 
12312       case 't': /* horizontal tab */
12313         return '\t';
12314 
12315       case 'r': /* carriage-return */
12316         return '\r';
12317 
12318       case 'f': /* form-feed */
12319         return '\f';
12320 
12321       case 'v': /* vertical tab */
12322         return '\13';
12323 
12324       case 'a': /* alarm(bell) */
12325         return '\007';
12326 
12327       case 'e': /* escape */
12328         return 033;
12329 
12330       case '0': case '1': case '2': case '3': /* octal constant */
12331       case '4': case '5': case '6': case '7':
12332         pushback(c);
12333         c = scan_oct(lex_p, 3, &numlen);
12334         lex_p += numlen;
12335         return c;
12336 
12337       case 'x': /* hex constant */
12338         c = tok_hex(&numlen);
12339         if (numlen == 0) return 0;
12340         return c;
12341 
12342       case 'b': /* backspace */
12343         return '\010';
12344 
12345       case 's': /* space */
12346         return ' ';
12347 
12348       case 'M':
12349         if (flags & ESCAPE_META) goto eof;
12350         if ((c = nextc()) != '-') {
12351             pushback(c);
12352             goto eof;
12353         }
12354         if ((c = nextc()) == '\\') {
12355             if (peek('u')) goto eof;
12356             return read_escape(flags|ESCAPE_META, encp) | 0x80;
12357         }
12358         else if (c == -1 || !ISASCII(c)) goto eof;
12359         else {
12360             return ((c & 0xff) | 0x80);
12361         }
12362 
12363       case 'C':
12364         if ((c = nextc()) != '-') {
12365             pushback(c);
12366             goto eof;
12367         }
12368       case 'c':
12369         if (flags & ESCAPE_CONTROL) goto eof;
12370         if ((c = nextc())== '\\') {
12371             if (peek('u')) goto eof;
12372             c = read_escape(flags|ESCAPE_CONTROL, encp);
12373         }
12374         else if (c == '?')
12375             return 0177;
12376         else if (c == -1 || !ISASCII(c)) goto eof;
12377         return c & 0x9f;
12378 
12379       eof:
12380       case -1:
12381         yyerror("Invalid escape character syntax");
12382         return '\0';
12383 
12384       default:
12385         return c;
12386     }
12387 }
12388 
12389 static void
12390 parser_tokaddmbc(struct parser_params *parser, int c, rb_encoding *enc)
12391 {
12392     int len = rb_enc_codelen(c, enc);
12393     rb_enc_mbcput(c, tokspace(len), enc);
12394 }
12395 
12396 static int
12397 parser_tokadd_escape(struct parser_params *parser, rb_encoding **encp)
12398 {
12399     int c;
12400     int flags = 0;
12401     size_t numlen;
12402 
12403   first:
12404     switch (c = nextc()) {
12405       case '\n':
12406         return 0;               /* just ignore */
12407 
12408       case '0': case '1': case '2': case '3': /* octal constant */
12409       case '4': case '5': case '6': case '7':
12410         {
12411             ruby_scan_oct(--lex_p, 3, &numlen);
12412             if (numlen == 0) goto eof;
12413             lex_p += numlen;
12414             tokcopy((int)numlen + 1);
12415         }
12416         return 0;
12417 
12418       case 'x': /* hex constant */
12419         {
12420             tok_hex(&numlen);
12421             if (numlen == 0) return -1;
12422             tokcopy((int)numlen + 2);
12423         }
12424         return 0;
12425 
12426       case 'M':
12427         if (flags & ESCAPE_META) goto eof;
12428         if ((c = nextc()) != '-') {
12429             pushback(c);
12430             goto eof;
12431         }
12432         tokcopy(3);
12433         flags |= ESCAPE_META;
12434         goto escaped;
12435 
12436       case 'C':
12437         if (flags & ESCAPE_CONTROL) goto eof;
12438         if ((c = nextc()) != '-') {
12439             pushback(c);
12440             goto eof;
12441         }
12442         tokcopy(3);
12443         goto escaped;
12444 
12445       case 'c':
12446         if (flags & ESCAPE_CONTROL) goto eof;
12447         tokcopy(2);
12448         flags |= ESCAPE_CONTROL;
12449       escaped:
12450         if ((c = nextc()) == '\\') {
12451             goto first;
12452         }
12453         else if (c == -1) goto eof;
12454         tokadd(c);
12455         return 0;
12456 
12457       eof:
12458       case -1:
12459         yyerror("Invalid escape character syntax");
12460         return -1;
12461 
12462       default:
12463         tokadd('\\');
12464         tokadd(c);
12465     }
12466     return 0;
12467 }
12468 
12469 static int
12470 parser_regx_options(struct parser_params *parser)
12471 {
12472     int kcode = 0;
12473     int kopt = 0;
12474     int options = 0;
12475     int c, opt, kc;
12476 
12477     newtok();
12478     while (c = nextc(), ISALPHA(c)) {
12479         if (c == 'o') {
12480             options |= RE_OPTION_ONCE;
12481         }
12482         else if (rb_char_to_option_kcode(c, &opt, &kc)) {
12483             if (kc >= 0) {
12484                 if (kc != rb_ascii8bit_encindex()) kcode = c;
12485                 kopt = opt;
12486             }
12487             else {
12488                 options |= opt;
12489             }
12490         }
12491         else {
12492             tokadd(c);
12493         }
12494     }
12495     options |= kopt;
12496     pushback(c);
12497     if (toklen()) {
12498         tokfix();
12499         compile_error(PARSER_ARG "unknown regexp option%s - %s",
12500                       toklen() > 1 ? "s" : "", tok());
12501     }
12502     return options | RE_OPTION_ENCODING(kcode);
12503 }
12504 
12505 static void
12506 dispose_string(VALUE str)
12507 {
12508     rb_str_free(str);
12509     rb_gc_force_recycle(str);
12510 }
12511 
12512 static int
12513 parser_tokadd_mbchar(struct parser_params *parser, int c)
12514 {
12515     int len = parser_precise_mbclen();
12516     if (!MBCLEN_CHARFOUND_P(len)) {
12517         compile_error(PARSER_ARG "invalid multibyte char (%s)", parser_encoding_name());
12518         return -1;
12519     }
12520     tokadd(c);
12521     lex_p += --len;
12522     if (len > 0) tokcopy(len);
12523     return c;
12524 }
12525 
12526 #define tokadd_mbchar(c) parser_tokadd_mbchar(parser, (c))
12527 
12528 static inline int
12529 simple_re_meta(int c)
12530 {
12531     switch (c) {
12532       case '$': case '*': case '+': case '.':
12533       case '?': case '^': case '|':
12534       case ')': case ']': case '}': case '>':
12535         return TRUE;
12536       default:
12537         return FALSE;
12538     }
12539 }
12540 
12541 static int
12542 parser_tokadd_string(struct parser_params *parser,
12543                      int func, int term, int paren, long *nest,
12544                      rb_encoding **encp)
12545 {
12546     int c;
12547     int has_nonascii = 0;
12548     rb_encoding *enc = *encp;
12549     char *errbuf = 0;
12550     static const char mixed_msg[] = "%s mixed within %s source";
12551 
12552 #define mixed_error(enc1, enc2) if (!errbuf) {  \
12553         size_t len = sizeof(mixed_msg) - 4;     \
12554         len += strlen(rb_enc_name(enc1));       \
12555         len += strlen(rb_enc_name(enc2));       \
12556         errbuf = ALLOCA_N(char, len);           \
12557         snprintf(errbuf, len, mixed_msg,        \
12558                  rb_enc_name(enc1),             \
12559                  rb_enc_name(enc2));            \
12560         yyerror(errbuf);                        \
12561     }
12562 #define mixed_escape(beg, enc1, enc2) do {      \
12563         const char *pos = lex_p;                \
12564         lex_p = (beg);                          \
12565         mixed_error((enc1), (enc2));            \
12566         lex_p = pos;                            \
12567     } while (0)
12568 
12569     while ((c = nextc()) != -1) {
12570         if (paren && c == paren) {
12571             ++*nest;
12572         }
12573         else if (c == term) {
12574             if (!nest || !*nest) {
12575                 pushback(c);
12576                 break;
12577             }
12578             --*nest;
12579         }
12580         else if ((func & STR_FUNC_EXPAND) && c == '#' && lex_p < lex_pend) {
12581             int c2 = *lex_p;
12582             if (c2 == '$' || c2 == '@' || c2 == '{') {
12583                 pushback(c);
12584                 break;
12585             }
12586         }
12587         else if (c == '\\') {
12588             const char *beg = lex_p - 1;
12589             c = nextc();
12590             switch (c) {
12591               case '\n':
12592                 if (func & STR_FUNC_QWORDS) break;
12593                 if (func & STR_FUNC_EXPAND) continue;
12594                 tokadd('\\');
12595                 break;
12596 
12597               case '\\':
12598                 if (func & STR_FUNC_ESCAPE) tokadd(c);
12599                 break;
12600 
12601               case 'u':
12602                 if ((func & STR_FUNC_EXPAND) == 0) {
12603                     tokadd('\\');
12604                     break;
12605                 }
12606                 parser_tokadd_utf8(parser, &enc, 1,
12607                                    func & STR_FUNC_SYMBOL,
12608                                    func & STR_FUNC_REGEXP);
12609                 if (has_nonascii && enc != *encp) {
12610                     mixed_escape(beg, enc, *encp);
12611                 }
12612                 continue;
12613 
12614               default:
12615                 if (c == -1) return -1;
12616                 if (!ISASCII(c)) {
12617                     if ((func & STR_FUNC_EXPAND) == 0) tokadd('\\');
12618                     goto non_ascii;
12619                 }
12620                 if (func & STR_FUNC_REGEXP) {
12621                     if (c == term && !simple_re_meta(c)) {
12622                         tokadd(c);
12623                         continue;
12624                     }
12625                     pushback(c);
12626                     if ((c = tokadd_escape(&enc)) < 0)
12627                         return -1;
12628                     if (has_nonascii && enc != *encp) {
12629                         mixed_escape(beg, enc, *encp);
12630                     }
12631                     continue;
12632                 }
12633                 else if (func & STR_FUNC_EXPAND) {
12634                     pushback(c);
12635                     if (func & STR_FUNC_ESCAPE) tokadd('\\');
12636                     c = read_escape(0, &enc);
12637                 }
12638                 else if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) {
12639                     /* ignore backslashed spaces in %w */
12640                 }
12641                 else if (c != term && !(paren && c == paren)) {
12642                     tokadd('\\');
12643                     pushback(c);
12644                     continue;
12645                 }
12646             }
12647         }
12648         else if (!parser_isascii()) {
12649           non_ascii:
12650             has_nonascii = 1;
12651             if (enc != *encp) {
12652                 mixed_error(enc, *encp);
12653                 continue;
12654             }
12655             if (tokadd_mbchar(c) == -1) return -1;
12656             continue;
12657         }
12658         else if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) {
12659             pushback(c);
12660             break;
12661         }
12662         if (c & 0x80) {
12663             has_nonascii = 1;
12664             if (enc != *encp) {
12665                 mixed_error(enc, *encp);
12666                 continue;
12667             }
12668         }
12669         tokadd(c);
12670     }
12671     *encp = enc;
12672     return c;
12673 }
12674 
12675 #define NEW_STRTERM(func, term, paren) \
12676         rb_node_newnode(NODE_STRTERM, (func), (term) | ((paren) << (CHAR_BIT * 2)), 0)
12677 
12678 #ifdef RIPPER
12679 static void
12680 ripper_flush_string_content(struct parser_params *parser, rb_encoding *enc)
12681 {
12682     if (!NIL_P(parser->delayed)) {
12683         ptrdiff_t len = lex_p - parser->tokp;
12684         if (len > 0) {
12685             rb_enc_str_buf_cat(parser->delayed, parser->tokp, len, enc);
12686         }
12687         ripper_dispatch_delayed_token(parser, tSTRING_CONTENT);
12688         parser->tokp = lex_p;
12689     }
12690 }
12691 
12692 #define flush_string_content(enc) ripper_flush_string_content(parser, (enc))
12693 #else
12694 #define flush_string_content(enc) ((void)(enc))
12695 #endif
12696 
12697 RUBY_FUNC_EXPORTED const unsigned int ruby_global_name_punct_bits[(0x7e - 0x20 + 31) / 32];
12698 /* this can be shared with ripper, since it's independent from struct
12699  * parser_params. */
12700 #ifndef RIPPER
12701 #define BIT(c, idx) (((c) / 32 - 1 == idx) ? (1U << ((c) % 32)) : 0)
12702 #define SPECIAL_PUNCT(idx) ( \
12703         BIT('~', idx) | BIT('*', idx) | BIT('$', idx) | BIT('?', idx) | \
12704         BIT('!', idx) | BIT('@', idx) | BIT('/', idx) | BIT('\\', idx) | \
12705         BIT(';', idx) | BIT(',', idx) | BIT('.', idx) | BIT('=', idx) | \
12706         BIT(':', idx) | BIT('<', idx) | BIT('>', idx) | BIT('\"', idx) | \
12707         BIT('&', idx) | BIT('`', idx) | BIT('\'', idx) | BIT('+', idx) | \
12708         BIT('0', idx))
12709 const unsigned int ruby_global_name_punct_bits[] = {
12710     SPECIAL_PUNCT(0),
12711     SPECIAL_PUNCT(1),
12712     SPECIAL_PUNCT(2),
12713 };
12714 #undef BIT
12715 #undef SPECIAL_PUNCT
12716 #endif
12717 
12718 static inline int
12719 is_global_name_punct(const int c)
12720 {
12721     if (c <= 0x20 || 0x7e < c) return 0;
12722     return (ruby_global_name_punct_bits[(c - 0x20) / 32] >> (c % 32)) & 1;
12723 }
12724 
12725 static int
12726 parser_peek_variable_name(struct parser_params *parser)
12727 {
12728     int c;
12729     const char *p = lex_p;
12730 
12731     if (p + 1 >= lex_pend) return 0;
12732     c = *p++;
12733     switch (c) {
12734       case '$':
12735         if ((c = *p) == '-') {
12736             if (++p >= lex_pend) return 0;
12737             c = *p;
12738         }
12739         else if (is_global_name_punct(c) || ISDIGIT(c)) {
12740             return tSTRING_DVAR;
12741         }
12742         break;
12743       case '@':
12744         if ((c = *p) == '@') {
12745             if (++p >= lex_pend) return 0;
12746             c = *p;
12747         }
12748         break;
12749       case '{':
12750         lex_p = p;
12751         command_start = TRUE;
12752         return tSTRING_DBEG;
12753       default:
12754         return 0;
12755     }
12756     if (!ISASCII(c) || c == '_' || ISALPHA(c))
12757         return tSTRING_DVAR;
12758     return 0;
12759 }
12760 
12761 static int
12762 parser_parse_string(struct parser_params *parser, NODE *quote)
12763 {
12764     int func = (int)quote->nd_func;
12765     int term = nd_term(quote);
12766     int paren = nd_paren(quote);
12767     int c, space = 0;
12768     rb_encoding *enc = current_enc;
12769 
12770     if (func == -1) return tSTRING_END;
12771     c = nextc();
12772     if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) {
12773         do {c = nextc();} while (ISSPACE(c));
12774         space = 1;
12775     }
12776     if (c == term && !quote->nd_nest) {
12777         if (func & STR_FUNC_QWORDS) {
12778             quote->nd_func = -1;
12779             return ' ';
12780         }
12781         if (!(func & STR_FUNC_REGEXP)) return tSTRING_END;
12782         set_yylval_num(regx_options());
12783         return tREGEXP_END;
12784     }
12785     if (space) {
12786         pushback(c);
12787         return ' ';
12788     }
12789     newtok();
12790     if ((func & STR_FUNC_EXPAND) && c == '#') {
12791         int t = parser_peek_variable_name(parser);
12792         if (t) return t;
12793         tokadd('#');
12794         c = nextc();
12795     }
12796     pushback(c);
12797     if (tokadd_string(func, term, paren, &quote->nd_nest,
12798                       &enc) == -1) {
12799         ruby_sourceline = nd_line(quote);
12800         if (func & STR_FUNC_REGEXP) {
12801             if (parser->eofp)
12802                 compile_error(PARSER_ARG "unterminated regexp meets end of file");
12803             return tREGEXP_END;
12804         }
12805         else {
12806             if (parser->eofp)
12807                 compile_error(PARSER_ARG "unterminated string meets end of file");
12808             return tSTRING_END;
12809         }
12810     }
12811 
12812     tokfix();
12813     set_yylval_str(STR_NEW3(tok(), toklen(), enc, func));
12814     flush_string_content(enc);
12815 
12816     return tSTRING_CONTENT;
12817 }
12818 
12819 static int
12820 parser_heredoc_identifier(struct parser_params *parser)
12821 {
12822     int c = nextc(), term, func = 0;
12823     long len;
12824 
12825     if (c == '-') {
12826         c = nextc();
12827         func = STR_FUNC_INDENT;
12828     }
12829     switch (c) {
12830       case '\'':
12831         func |= str_squote; goto quoted;
12832       case '"':
12833         func |= str_dquote; goto quoted;
12834       case '`':
12835         func |= str_xquote;
12836       quoted:
12837         newtok();
12838         tokadd(func);
12839         term = c;
12840         while ((c = nextc()) != -1 && c != term) {
12841             if (tokadd_mbchar(c) == -1) return 0;
12842         }
12843         if (c == -1) {
12844             compile_error(PARSER_ARG "unterminated here document identifier");
12845             return 0;
12846         }
12847         break;
12848 
12849       default:
12850         if (!parser_is_identchar()) {
12851             pushback(c);
12852             if (func & STR_FUNC_INDENT) {
12853                 pushback('-');
12854             }
12855             return 0;
12856         }
12857         newtok();
12858         term = '"';
12859         tokadd(func |= str_dquote);
12860         do {
12861             if (tokadd_mbchar(c) == -1) return 0;
12862         } while ((c = nextc()) != -1 && parser_is_identchar());
12863         pushback(c);
12864         break;
12865     }
12866 
12867     tokfix();
12868 #ifdef RIPPER
12869     ripper_dispatch_scan_event(parser, tHEREDOC_BEG);
12870 #endif
12871     len = lex_p - lex_pbeg;
12872     lex_goto_eol(parser);
12873     lex_strterm = rb_node_newnode(NODE_HEREDOC,
12874                                   STR_NEW(tok(), toklen()),     /* nd_lit */
12875                                   len,                          /* nd_nth */
12876                                   lex_lastline);                /* nd_orig */
12877     nd_set_line(lex_strterm, ruby_sourceline);
12878     ripper_flush(parser);
12879     return term == '`' ? tXSTRING_BEG : tSTRING_BEG;
12880 }
12881 
12882 static void
12883 parser_heredoc_restore(struct parser_params *parser, NODE *here)
12884 {
12885     VALUE line;
12886 
12887     lex_strterm = 0;
12888     line = here->nd_orig;
12889     lex_lastline = line;
12890     lex_pbeg = RSTRING_PTR(line);
12891     lex_pend = lex_pbeg + RSTRING_LEN(line);
12892     lex_p = lex_pbeg + here->nd_nth;
12893     heredoc_end = ruby_sourceline;
12894     ruby_sourceline = nd_line(here);
12895     dispose_string(here->nd_lit);
12896     rb_gc_force_recycle((VALUE)here);
12897     ripper_flush(parser);
12898 }
12899 
12900 static int
12901 parser_whole_match_p(struct parser_params *parser,
12902     const char *eos, long len, int indent)
12903 {
12904     const char *p = lex_pbeg;
12905     long n;
12906 
12907     if (indent) {
12908         while (*p && ISSPACE(*p)) p++;
12909     }
12910     n = lex_pend - (p + len);
12911     if (n < 0) return FALSE;
12912     if (n > 0 && p[len] != '\n') {
12913         if (p[len] != '\r') return FALSE;
12914         if (n <= 1 || p[len+1] != '\n') return FALSE;
12915     }
12916     return strncmp(eos, p, len) == 0;
12917 }
12918 
12919 #define NUM_SUFFIX_R   (1<<0)
12920 #define NUM_SUFFIX_I   (1<<1)
12921 #define NUM_SUFFIX_ALL 3
12922 
12923 static int
12924 parser_number_literal_suffix(struct parser_params *parser, int mask)
12925 {
12926     int c, result = 0;
12927     const char *lastp = lex_p;
12928 
12929     while ((c = nextc()) != -1) {
12930         if ((mask & NUM_SUFFIX_I) && c == 'i') {
12931             result |= (mask & NUM_SUFFIX_I);
12932             mask &= ~NUM_SUFFIX_I;
12933             /* r after i, rational of complex is disallowed */
12934             mask &= ~NUM_SUFFIX_R;
12935             continue;
12936         }
12937         if ((mask & NUM_SUFFIX_R) && c == 'r') {
12938             result |= (mask & NUM_SUFFIX_R);
12939             mask &= ~NUM_SUFFIX_R;
12940             continue;
12941         }
12942         if (!ISASCII(c) || ISALPHA(c) || c == '_') {
12943             lex_p = lastp;
12944             return 0;
12945         }
12946         pushback(c);
12947         break;
12948     }
12949     return result;
12950 }
12951 
12952 static int
12953 parser_set_number_literal(struct parser_params *parser, VALUE v, int type, int suffix)
12954 {
12955     if (suffix & NUM_SUFFIX_I) {
12956         v = rb_complex_raw(INT2FIX(0), v);
12957         type = tIMAGINARY;
12958     }
12959     set_yylval_literal(v);
12960     return type;
12961 }
12962 
12963 static int
12964 parser_set_integer_literal(struct parser_params *parser, VALUE v, int suffix)
12965 {
12966     int type = tINTEGER;
12967     if (suffix & NUM_SUFFIX_R) {
12968         v = rb_rational_raw1(v);
12969         type = tRATIONAL;
12970     }
12971     return set_number_literal(v, type, suffix);
12972 }
12973 
12974 #ifdef RIPPER
12975 static void
12976 ripper_dispatch_heredoc_end(struct parser_params *parser)
12977 {
12978     if (!NIL_P(parser->delayed))
12979         ripper_dispatch_delayed_token(parser, tSTRING_CONTENT);
12980     lex_goto_eol(parser);
12981     ripper_dispatch_ignored_scan_event(parser, tHEREDOC_END);
12982 }
12983 
12984 #define dispatch_heredoc_end() ripper_dispatch_heredoc_end(parser)
12985 #else
12986 #define dispatch_heredoc_end() ((void)0)
12987 #endif
12988 
12989 static int
12990 parser_here_document(struct parser_params *parser, NODE *here)
12991 {
12992     int c, func, indent = 0;
12993     const char *eos, *p, *pend;
12994     long len;
12995     VALUE str = 0;
12996     rb_encoding *enc = current_enc;
12997 
12998     eos = RSTRING_PTR(here->nd_lit);
12999     len = RSTRING_LEN(here->nd_lit) - 1;
13000     indent = (func = *eos++) & STR_FUNC_INDENT;
13001 
13002     if ((c = nextc()) == -1) {
13003       error:
13004         compile_error(PARSER_ARG "can't find string \"%s\" anywhere before EOF", eos);
13005 #ifdef RIPPER
13006         if (NIL_P(parser->delayed)) {
13007             ripper_dispatch_scan_event(parser, tSTRING_CONTENT);
13008         }
13009         else {
13010             if (str ||
13011                 ((len = lex_p - parser->tokp) > 0 &&
13012                  (str = STR_NEW3(parser->tokp, len, enc, func), 1))) {
13013                 rb_str_append(parser->delayed, str);
13014             }
13015             ripper_dispatch_delayed_token(parser, tSTRING_CONTENT);
13016         }
13017         lex_goto_eol(parser);
13018 #endif
13019       restore:
13020         heredoc_restore(lex_strterm);
13021         return 0;
13022     }
13023     if (was_bol() && whole_match_p(eos, len, indent)) {
13024         dispatch_heredoc_end();
13025         heredoc_restore(lex_strterm);
13026         return tSTRING_END;
13027     }
13028 
13029     if (!(func & STR_FUNC_EXPAND)) {
13030         do {
13031             p = RSTRING_PTR(lex_lastline);
13032             pend = lex_pend;
13033             if (pend > p) {
13034                 switch (pend[-1]) {
13035                   case '\n':
13036                     if (--pend == p || pend[-1] != '\r') {
13037                         pend++;
13038                         break;
13039                     }
13040                   case '\r':
13041                     --pend;
13042                 }
13043             }
13044             if (str)
13045                 rb_str_cat(str, p, pend - p);
13046             else
13047                 str = STR_NEW(p, pend - p);
13048             if (pend < lex_pend) rb_str_cat(str, "\n", 1);
13049             lex_goto_eol(parser);
13050             if (nextc() == -1) {
13051                 if (str) {
13052                     dispose_string(str);
13053                     str = 0;
13054                 }
13055                 goto error;
13056             }
13057         } while (!whole_match_p(eos, len, indent));
13058     }
13059     else {
13060         /*      int mb = ENC_CODERANGE_7BIT, *mbp = &mb;*/
13061         newtok();
13062         if (c == '#') {
13063             int t = parser_peek_variable_name(parser);
13064             if (t) return t;
13065             tokadd('#');
13066             c = nextc();
13067         }
13068         do {
13069             pushback(c);
13070             if ((c = tokadd_string(func, '\n', 0, NULL, &enc)) == -1) {
13071                 if (parser->eofp) goto error;
13072                 goto restore;
13073             }
13074             if (c != '\n') {
13075                 set_yylval_str(STR_NEW3(tok(), toklen(), enc, func));
13076                 flush_string_content(enc);
13077                 return tSTRING_CONTENT;
13078             }
13079             tokadd(nextc());
13080             /*      if (mbp && mb == ENC_CODERANGE_UNKNOWN) mbp = 0;*/
13081             if ((c = nextc()) == -1) goto error;
13082         } while (!whole_match_p(eos, len, indent));
13083         str = STR_NEW3(tok(), toklen(), enc, func);
13084     }
13085     dispatch_heredoc_end();
13086     heredoc_restore(lex_strterm);
13087     lex_strterm = NEW_STRTERM(-1, 0, 0);
13088     set_yylval_str(str);
13089     return tSTRING_CONTENT;
13090 }
13091 
13092 #include "lex.c"
13093 
13094 static void
13095 arg_ambiguous_gen(struct parser_params *parser)
13096 {
13097 #ifndef RIPPER
13098     rb_warning0("ambiguous first argument; put parentheses or even spaces");
13099 #else
13100     dispatch0(arg_ambiguous);
13101 #endif
13102 }
13103 #define arg_ambiguous() (arg_ambiguous_gen(parser), 1)
13104 
13105 static ID
13106 formal_argument_gen(struct parser_params *parser, ID lhs)
13107 {
13108 #ifndef RIPPER
13109     if (!is_local_id(lhs))
13110         yyerror("formal argument must be local variable");
13111 #endif
13112     shadowing_lvar(lhs);
13113     return lhs;
13114 }
13115 
13116 static int
13117 lvar_defined_gen(struct parser_params *parser, ID id)
13118 {
13119     return (dyna_in_block() && dvar_defined_get(id)) || local_id(id);
13120 }
13121 
13122 /* emacsen -*- hack */
13123 static long
13124 parser_encode_length(struct parser_params *parser, const char *name, long len)
13125 {
13126     long nlen;
13127 
13128     if (len > 5 && name[nlen = len - 5] == '-') {
13129         if (rb_memcicmp(name + nlen + 1, "unix", 4) == 0)
13130             return nlen;
13131     }
13132     if (len > 4 && name[nlen = len - 4] == '-') {
13133         if (rb_memcicmp(name + nlen + 1, "dos", 3) == 0)
13134             return nlen;
13135         if (rb_memcicmp(name + nlen + 1, "mac", 3) == 0 &&
13136             !(len == 8 && rb_memcicmp(name, "utf8-mac", len) == 0))
13137             /* exclude UTF8-MAC because the encoding named "UTF8" doesn't exist in Ruby */
13138             return nlen;
13139     }
13140     return len;
13141 }
13142 
13143 static void
13144 parser_set_encode(struct parser_params *parser, const char *name)
13145 {
13146     int idx = rb_enc_find_index(name);
13147     rb_encoding *enc;
13148     VALUE excargs[3];
13149 
13150     if (idx < 0) {
13151         excargs[1] = rb_sprintf("unknown encoding name: %s", name);
13152       error:
13153         excargs[0] = rb_eArgError;
13154         excargs[2] = rb_make_backtrace();
13155         rb_ary_unshift(excargs[2], rb_sprintf("%s:%d", ruby_sourcefile, ruby_sourceline));
13156         rb_exc_raise(rb_make_exception(3, excargs));
13157     }
13158     enc = rb_enc_from_index(idx);
13159     if (!rb_enc_asciicompat(enc)) {
13160         excargs[1] = rb_sprintf("%s is not ASCII compatible", rb_enc_name(enc));
13161         goto error;
13162     }
13163     parser->enc = enc;
13164 #ifndef RIPPER
13165     if (ruby_debug_lines) {
13166         VALUE lines = ruby_debug_lines;
13167         long i, n = RARRAY_LEN(lines);
13168         for (i = 0; i < n; ++i) {
13169             rb_enc_associate_index(RARRAY_AREF(lines, i), idx);
13170         }
13171     }
13172 #endif
13173 }
13174 
13175 static int
13176 comment_at_top(struct parser_params *parser)
13177 {
13178     const char *p = lex_pbeg, *pend = lex_p - 1;
13179     if (parser->line_count != (parser->has_shebang ? 2 : 1)) return 0;
13180     while (p < pend) {
13181         if (!ISSPACE(*p)) return 0;
13182         p++;
13183     }
13184     return 1;
13185 }
13186 
13187 #ifndef RIPPER
13188 typedef long (*rb_magic_comment_length_t)(struct parser_params *parser, const char *name, long len);
13189 typedef void (*rb_magic_comment_setter_t)(struct parser_params *parser, const char *name, const char *val);
13190 
13191 static void
13192 magic_comment_encoding(struct parser_params *parser, const char *name, const char *val)
13193 {
13194     if (!comment_at_top(parser)) {
13195         return;
13196     }
13197     parser_set_encode(parser, val);
13198 }
13199 
13200 static void
13201 parser_set_token_info(struct parser_params *parser, const char *name, const char *val)
13202 {
13203     int *p = &parser->parser_token_info_enabled;
13204 
13205     switch (*val) {
13206       case 't': case 'T':
13207         if (strcasecmp(val, "true") == 0) {
13208             *p = TRUE;
13209             return;
13210         }
13211         break;
13212       case 'f': case 'F':
13213         if (strcasecmp(val, "false") == 0) {
13214             *p = FALSE;
13215             return;
13216         }
13217         break;
13218     }
13219     rb_compile_warning(ruby_sourcefile, ruby_sourceline, "invalid value for %s: %s", name, val);
13220 }
13221 
13222 struct magic_comment {
13223     const char *name;
13224     rb_magic_comment_setter_t func;
13225     rb_magic_comment_length_t length;
13226 };
13227 
13228 static const struct magic_comment magic_comments[] = {
13229     {"coding", magic_comment_encoding, parser_encode_length},
13230     {"encoding", magic_comment_encoding, parser_encode_length},
13231     {"warn_indent", parser_set_token_info},
13232 };
13233 #endif
13234 
13235 static const char *
13236 magic_comment_marker(const char *str, long len)
13237 {
13238     long i = 2;
13239 
13240     while (i < len) {
13241         switch (str[i]) {
13242           case '-':
13243             if (str[i-1] == '*' && str[i-2] == '-') {
13244                 return str + i + 1;
13245             }
13246             i += 2;
13247             break;
13248           case '*':
13249             if (i + 1 >= len) return 0;
13250             if (str[i+1] != '-') {
13251                 i += 4;
13252             }
13253             else if (str[i-1] != '-') {
13254                 i += 2;
13255             }
13256             else {
13257                 return str + i + 2;
13258             }
13259             break;
13260           default:
13261             i += 3;
13262             break;
13263         }
13264     }
13265     return 0;
13266 }
13267 
13268 static int
13269 parser_magic_comment(struct parser_params *parser, const char *str, long len)
13270 {
13271     VALUE name = 0, val = 0;
13272     const char *beg, *end, *vbeg, *vend;
13273 #define str_copy(_s, _p, _n) ((_s) \
13274         ? (void)(rb_str_resize((_s), (_n)), \
13275            MEMCPY(RSTRING_PTR(_s), (_p), char, (_n)), (_s)) \
13276         : (void)((_s) = STR_NEW((_p), (_n))))
13277 
13278     if (len <= 7) return FALSE;
13279     if (!(beg = magic_comment_marker(str, len))) return FALSE;
13280     if (!(end = magic_comment_marker(beg, str + len - beg))) return FALSE;
13281     str = beg;
13282     len = end - beg - 3;
13283 
13284     /* %r"([^\\s\'\":;]+)\\s*:\\s*(\"(?:\\\\.|[^\"])*\"|[^\"\\s;]+)[\\s;]*" */
13285     while (len > 0) {
13286 #ifndef RIPPER
13287         const struct magic_comment *p = magic_comments;
13288 #endif
13289         char *s;
13290         int i;
13291         long n = 0;
13292 
13293         for (; len > 0 && *str; str++, --len) {
13294             switch (*str) {
13295               case '\'': case '"': case ':': case ';':
13296                 continue;
13297             }
13298             if (!ISSPACE(*str)) break;
13299         }
13300         for (beg = str; len > 0; str++, --len) {
13301             switch (*str) {
13302               case '\'': case '"': case ':': case ';':
13303                 break;
13304               default:
13305                 if (ISSPACE(*str)) break;
13306                 continue;
13307             }
13308             break;
13309         }
13310         for (end = str; len > 0 && ISSPACE(*str); str++, --len);
13311         if (!len) break;
13312         if (*str != ':') continue;
13313 
13314         do str++; while (--len > 0 && ISSPACE(*str));
13315         if (!len) break;
13316         if (*str == '"') {
13317             for (vbeg = ++str; --len > 0 && *str != '"'; str++) {
13318                 if (*str == '\\') {
13319                     --len;
13320                     ++str;
13321                 }
13322             }
13323             vend = str;
13324             if (len) {
13325                 --len;
13326                 ++str;
13327             }
13328         }
13329         else {
13330             for (vbeg = str; len > 0 && *str != '"' && *str != ';' && !ISSPACE(*str); --len, str++);
13331             vend = str;
13332         }
13333         while (len > 0 && (*str == ';' || ISSPACE(*str))) --len, str++;
13334 
13335         n = end - beg;
13336         str_copy(name, beg, n);
13337         s = RSTRING_PTR(name);
13338         for (i = 0; i < n; ++i) {
13339             if (s[i] == '-') s[i] = '_';
13340         }
13341 #ifndef RIPPER
13342         do {
13343             if (STRNCASECMP(p->name, s, n) == 0) {
13344                 n = vend - vbeg;
13345                 if (p->length) {
13346                     n = (*p->length)(parser, vbeg, n);
13347                 }
13348                 str_copy(val, vbeg, n);
13349                 (*p->func)(parser, s, RSTRING_PTR(val));
13350                 break;
13351             }
13352         } while (++p < magic_comments + numberof(magic_comments));
13353 #else
13354         str_copy(val, vbeg, vend - vbeg);
13355         dispatch2(magic_comment, name, val);
13356 #endif
13357     }
13358 
13359     return TRUE;
13360 }
13361 
13362 static void
13363 set_file_encoding(struct parser_params *parser, const char *str, const char *send)
13364 {
13365     int sep = 0;
13366     const char *beg = str;
13367     VALUE s;
13368 
13369     for (;;) {
13370         if (send - str <= 6) return;
13371         switch (str[6]) {
13372           case 'C': case 'c': str += 6; continue;
13373           case 'O': case 'o': str += 5; continue;
13374           case 'D': case 'd': str += 4; continue;
13375           case 'I': case 'i': str += 3; continue;
13376           case 'N': case 'n': str += 2; continue;
13377           case 'G': case 'g': str += 1; continue;
13378           case '=': case ':':
13379             sep = 1;
13380             str += 6;
13381             break;
13382           default:
13383             str += 6;
13384             if (ISSPACE(*str)) break;
13385             continue;
13386         }
13387         if (STRNCASECMP(str-6, "coding", 6) == 0) break;
13388     }
13389     for (;;) {
13390         do {
13391             if (++str >= send) return;
13392         } while (ISSPACE(*str));
13393         if (sep) break;
13394         if (*str != '=' && *str != ':') return;
13395         sep = 1;
13396         str++;
13397     }
13398     beg = str;
13399     while ((*str == '-' || *str == '_' || ISALNUM(*str)) && ++str < send);
13400     s = rb_str_new(beg, parser_encode_length(parser, beg, str - beg));
13401     parser_set_encode(parser, RSTRING_PTR(s));
13402     rb_str_resize(s, 0);
13403 }
13404 
13405 static void
13406 parser_prepare(struct parser_params *parser)
13407 {
13408     int c = nextc();
13409     switch (c) {
13410       case '#':
13411         if (peek('!')) parser->has_shebang = 1;
13412         break;
13413       case 0xef:                /* UTF-8 BOM marker */
13414         if (lex_pend - lex_p >= 2 &&
13415             (unsigned char)lex_p[0] == 0xbb &&
13416             (unsigned char)lex_p[1] == 0xbf) {
13417             parser->enc = rb_utf8_encoding();
13418             lex_p += 2;
13419             lex_pbeg = lex_p;
13420             return;
13421         }
13422         break;
13423       case EOF:
13424         return;
13425     }
13426     pushback(c);
13427     parser->enc = rb_enc_get(lex_lastline);
13428 }
13429 
13430 #define IS_ARG() IS_lex_state(EXPR_ARG_ANY)
13431 #define IS_END() IS_lex_state(EXPR_END_ANY)
13432 #define IS_BEG() IS_lex_state(EXPR_BEG_ANY)
13433 #define IS_SPCARG(c) (IS_ARG() && space_seen && !ISSPACE(c))
13434 #define IS_LABEL_POSSIBLE() ((IS_lex_state(EXPR_BEG | EXPR_ENDFN) && !cmd_state) || IS_ARG())
13435 #define IS_LABEL_SUFFIX(n) (peek_n(':',(n)) && !peek_n(':', (n)+1))
13436 #define IS_AFTER_OPERATOR() IS_lex_state(EXPR_FNAME | EXPR_DOT)
13437 
13438 #ifndef RIPPER
13439 #define ambiguous_operator(op, syn) ( \
13440     rb_warning0("`"op"' after local variable or literal is interpreted as binary operator"), \
13441     rb_warning0("even though it seems like "syn""))
13442 #else
13443 #define ambiguous_operator(op, syn) dispatch2(operator_ambiguous, ripper_intern(op), rb_str_new_cstr(syn))
13444 #endif
13445 #define warn_balanced(op, syn) ((void) \
13446     (!IS_lex_state_for(last_state, EXPR_CLASS|EXPR_DOT|EXPR_FNAME|EXPR_ENDFN|EXPR_ENDARG) && \
13447      space_seen && !ISSPACE(c) && \
13448      (ambiguous_operator(op, syn), 0)))
13449 
13450 static int
13451 parser_yylex(struct parser_params *parser)
13452 {
13453     register int c;
13454     int space_seen = 0;
13455     int cmd_state;
13456     enum lex_state_e last_state;
13457     rb_encoding *enc;
13458     int mb;
13459 #ifdef RIPPER
13460     int fallthru = FALSE;
13461 #endif
13462 
13463     if (lex_strterm) {
13464         int token;
13465         if (nd_type(lex_strterm) == NODE_HEREDOC) {
13466             token = here_document(lex_strterm);
13467             if (token == tSTRING_END) {
13468                 lex_strterm = 0;
13469                 lex_state = EXPR_END;
13470             }
13471         }
13472         else {
13473             token = parse_string(lex_strterm);
13474             if (token == tSTRING_END || token == tREGEXP_END) {
13475                 rb_gc_force_recycle((VALUE)lex_strterm);
13476                 lex_strterm = 0;
13477                 lex_state = EXPR_END;
13478             }
13479         }
13480         return token;
13481     }
13482     cmd_state = command_start;
13483     command_start = FALSE;
13484   retry:
13485     last_state = lex_state;
13486     switch (c = nextc()) {
13487       case '\0':                /* NUL */
13488       case '\004':              /* ^D */
13489       case '\032':              /* ^Z */
13490       case -1:                  /* end of script. */
13491         return 0;
13492 
13493         /* white spaces */
13494       case ' ': case '\t': case '\f': case '\r':
13495       case '\13': /* '\v' */
13496         space_seen = 1;
13497 #ifdef RIPPER
13498         while ((c = nextc())) {
13499             switch (c) {
13500               case ' ': case '\t': case '\f': case '\r':
13501               case '\13': /* '\v' */
13502                 break;
13503               default:
13504                 goto outofloop;
13505             }
13506         }
13507       outofloop:
13508         pushback(c);
13509         ripper_dispatch_scan_event(parser, tSP);
13510 #endif
13511         goto retry;
13512 
13513       case '#':         /* it's a comment */
13514         /* no magic_comment in shebang line */
13515         if (!parser_magic_comment(parser, lex_p, lex_pend - lex_p)) {
13516             if (comment_at_top(parser)) {
13517                 set_file_encoding(parser, lex_p, lex_pend);
13518             }
13519         }
13520         lex_p = lex_pend;
13521 #ifdef RIPPER
13522         ripper_dispatch_scan_event(parser, tCOMMENT);
13523         fallthru = TRUE;
13524 #endif
13525         /* fall through */
13526       case '\n':
13527         if (IS_lex_state(EXPR_BEG | EXPR_VALUE | EXPR_CLASS | EXPR_FNAME | EXPR_DOT | EXPR_LABELARG)) {
13528 #ifdef RIPPER
13529             if (!fallthru) {
13530                 ripper_dispatch_scan_event(parser, tIGNORED_NL);
13531             }
13532             fallthru = FALSE;
13533 #endif
13534             if (IS_lex_state(EXPR_LABELARG) && parser->parser_in_kwarg) {
13535                 goto normal_newline;
13536             }
13537             goto retry;
13538         }
13539         while ((c = nextc())) {
13540             switch (c) {
13541               case ' ': case '\t': case '\f': case '\r':
13542               case '\13': /* '\v' */
13543                 space_seen = 1;
13544                 break;
13545               case '.': {
13546                   if ((c = nextc()) != '.') {
13547                       pushback(c);
13548                       pushback('.');
13549                       goto retry;
13550                   }
13551               }
13552               default:
13553                 --ruby_sourceline;
13554                 lex_nextline = lex_lastline;
13555               case -1:          /* EOF no decrement*/
13556                 lex_goto_eol(parser);
13557 #ifdef RIPPER
13558                 if (c != -1) {
13559                     parser->tokp = lex_p;
13560                 }
13561 #endif
13562                 goto normal_newline;
13563             }
13564         }
13565       normal_newline:
13566         command_start = TRUE;
13567         lex_state = EXPR_BEG;
13568         return '\n';
13569 
13570       case '*':
13571         if ((c = nextc()) == '*') {
13572             if ((c = nextc()) == '=') {
13573                 set_yylval_id(tPOW);
13574                 lex_state = EXPR_BEG;
13575                 return tOP_ASGN;
13576             }
13577             pushback(c);
13578             if (IS_SPCARG(c)) {
13579                 rb_warning0("`**' interpreted as argument prefix");
13580                 c = tDSTAR;
13581             }
13582             else if (IS_BEG()) {
13583                 c = tDSTAR;
13584             }
13585             else {
13586                 warn_balanced("**", "argument prefix");
13587                 c = tPOW;
13588             }
13589         }
13590         else {
13591             if (c == '=') {
13592                 set_yylval_id('*');
13593                 lex_state = EXPR_BEG;
13594                 return tOP_ASGN;
13595             }
13596             pushback(c);
13597             if (IS_SPCARG(c)) {
13598                 rb_warning0("`*' interpreted as argument prefix");
13599                 c = tSTAR;
13600             }
13601             else if (IS_BEG()) {
13602                 c = tSTAR;
13603             }
13604             else {
13605                 warn_balanced("*", "argument prefix");
13606                 c = '*';
13607             }
13608         }
13609         lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG;
13610         return c;
13611 
13612       case '!':
13613         c = nextc();
13614         if (IS_AFTER_OPERATOR()) {
13615             lex_state = EXPR_ARG;
13616             if (c == '@') {
13617                 return '!';
13618             }
13619         }
13620         else {
13621             lex_state = EXPR_BEG;
13622         }
13623         if (c == '=') {
13624             return tNEQ;
13625         }
13626         if (c == '~') {
13627             return tNMATCH;
13628         }
13629         pushback(c);
13630         return '!';
13631 
13632       case '=':
13633         if (was_bol()) {
13634             /* skip embedded rd document */
13635             if (strncmp(lex_p, "begin", 5) == 0 && ISSPACE(lex_p[5])) {
13636 #ifdef RIPPER
13637                 int first_p = TRUE;
13638 
13639                 lex_goto_eol(parser);
13640                 ripper_dispatch_scan_event(parser, tEMBDOC_BEG);
13641 #endif
13642                 for (;;) {
13643                     lex_goto_eol(parser);
13644 #ifdef RIPPER
13645                     if (!first_p) {
13646                         ripper_dispatch_scan_event(parser, tEMBDOC);
13647                     }
13648                     first_p = FALSE;
13649 #endif
13650                     c = nextc();
13651                     if (c == -1) {
13652                         compile_error(PARSER_ARG "embedded document meets end of file");
13653                         return 0;
13654                     }
13655                     if (c != '=') continue;
13656                     if (strncmp(lex_p, "end", 3) == 0 &&
13657                         (lex_p + 3 == lex_pend || ISSPACE(lex_p[3]))) {
13658                         break;
13659                     }
13660                 }
13661                 lex_goto_eol(parser);
13662 #ifdef RIPPER
13663                 ripper_dispatch_scan_event(parser, tEMBDOC_END);
13664 #endif
13665                 goto retry;
13666             }
13667         }
13668 
13669         lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG;
13670         if ((c = nextc()) == '=') {
13671             if ((c = nextc()) == '=') {
13672                 return tEQQ;
13673             }
13674             pushback(c);
13675             return tEQ;
13676         }
13677         if (c == '~') {
13678             return tMATCH;
13679         }
13680         else if (c == '>') {
13681             return tASSOC;
13682         }
13683         pushback(c);
13684         return '=';
13685 
13686       case '<':
13687         last_state = lex_state;
13688         c = nextc();
13689         if (c == '<' &&
13690             !IS_lex_state(EXPR_DOT | EXPR_CLASS) &&
13691             !IS_END() &&
13692             (!IS_ARG() || space_seen)) {
13693             int token = heredoc_identifier();
13694             if (token) return token;
13695         }
13696         if (IS_AFTER_OPERATOR()) {
13697             lex_state = EXPR_ARG;
13698         }
13699         else {
13700             if (IS_lex_state(EXPR_CLASS))
13701                 command_start = TRUE;
13702             lex_state = EXPR_BEG;
13703         }
13704         if (c == '=') {
13705             if ((c = nextc()) == '>') {
13706                 return tCMP;
13707             }
13708             pushback(c);
13709             return tLEQ;
13710         }
13711         if (c == '<') {
13712             if ((c = nextc()) == '=') {
13713                 set_yylval_id(tLSHFT);
13714                 lex_state = EXPR_BEG;
13715                 return tOP_ASGN;
13716             }
13717             pushback(c);
13718             warn_balanced("<<", "here document");
13719             return tLSHFT;
13720         }
13721         pushback(c);
13722         return '<';
13723 
13724       case '>':
13725         lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG;
13726         if ((c = nextc()) == '=') {
13727             return tGEQ;
13728         }
13729         if (c == '>') {
13730             if ((c = nextc()) == '=') {
13731                 set_yylval_id(tRSHFT);
13732                 lex_state = EXPR_BEG;
13733                 return tOP_ASGN;
13734             }
13735             pushback(c);
13736             return tRSHFT;
13737         }
13738         pushback(c);
13739         return '>';
13740 
13741       case '"':
13742         lex_strterm = NEW_STRTERM(str_dquote, '"', 0);
13743         return tSTRING_BEG;
13744 
13745       case '`':
13746         if (IS_lex_state(EXPR_FNAME)) {
13747             lex_state = EXPR_ENDFN;
13748             return c;
13749         }
13750         if (IS_lex_state(EXPR_DOT)) {
13751             if (cmd_state)
13752                 lex_state = EXPR_CMDARG;
13753             else
13754                 lex_state = EXPR_ARG;
13755             return c;
13756         }
13757         lex_strterm = NEW_STRTERM(str_xquote, '`', 0);
13758         return tXSTRING_BEG;
13759 
13760       case '\'':
13761         lex_strterm = NEW_STRTERM(str_squote, '\'', 0);
13762         return tSTRING_BEG;
13763 
13764       case '?':
13765         if (IS_END()) {
13766             lex_state = EXPR_VALUE;
13767             return '?';
13768         }
13769         c = nextc();
13770         if (c == -1) {
13771             compile_error(PARSER_ARG "incomplete character syntax");
13772             return 0;
13773         }
13774         if (rb_enc_isspace(c, current_enc)) {
13775             if (!IS_ARG()) {
13776                 int c2 = 0;
13777                 switch (c) {
13778                   case ' ':
13779                     c2 = 's';
13780                     break;
13781                   case '\n':
13782                     c2 = 'n';
13783                     break;
13784                   case '\t':
13785                     c2 = 't';
13786                     break;
13787                   case '\v':
13788                     c2 = 'v';
13789                     break;
13790                   case '\r':
13791                     c2 = 'r';
13792                     break;
13793                   case '\f':
13794                     c2 = 'f';
13795                     break;
13796                 }
13797                 if (c2) {
13798                     rb_warnI("invalid character syntax; use ?\\%c", c2);
13799                 }
13800             }
13801           ternary:
13802             pushback(c);
13803             lex_state = EXPR_VALUE;
13804             return '?';
13805         }
13806         newtok();
13807         enc = current_enc;
13808         if (!parser_isascii()) {
13809             if (tokadd_mbchar(c) == -1) return 0;
13810         }
13811         else if ((rb_enc_isalnum(c, current_enc) || c == '_') &&
13812                  lex_p < lex_pend && is_identchar(lex_p, lex_pend, current_enc)) {
13813             goto ternary;
13814         }
13815         else if (c == '\\') {
13816             if (peek('u')) {
13817                 nextc();
13818                 c = parser_tokadd_utf8(parser, &enc, 0, 0, 0);
13819                 if (0x80 <= c) {
13820                     tokaddmbc(c, enc);
13821                 }
13822                 else {
13823                     tokadd(c);
13824                 }
13825             }
13826             else if (!lex_eol_p() && !(c = *lex_p, ISASCII(c))) {
13827                 nextc();
13828                 if (tokadd_mbchar(c) == -1) return 0;
13829             }
13830             else {
13831                 c = read_escape(0, &enc);
13832                 tokadd(c);
13833             }
13834         }
13835         else {
13836             tokadd(c);
13837         }
13838         tokfix();
13839         set_yylval_str(STR_NEW3(tok(), toklen(), enc, 0));
13840         lex_state = EXPR_END;
13841         return tCHAR;
13842 
13843       case '&':
13844         if ((c = nextc()) == '&') {
13845             lex_state = EXPR_BEG;
13846             if ((c = nextc()) == '=') {
13847                 set_yylval_id(tANDOP);
13848                 lex_state = EXPR_BEG;
13849                 return tOP_ASGN;
13850             }
13851             pushback(c);
13852             return tANDOP;
13853         }
13854         else if (c == '=') {
13855             set_yylval_id('&');
13856             lex_state = EXPR_BEG;
13857             return tOP_ASGN;
13858         }
13859         pushback(c);
13860         if (IS_SPCARG(c)) {
13861             rb_warning0("`&' interpreted as argument prefix");
13862             c = tAMPER;
13863         }
13864         else if (IS_BEG()) {
13865             c = tAMPER;
13866         }
13867         else {
13868             warn_balanced("&", "argument prefix");
13869             c = '&';
13870         }
13871         lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG;
13872         return c;
13873 
13874       case '|':
13875         if ((c = nextc()) == '|') {
13876             lex_state = EXPR_BEG;
13877             if ((c = nextc()) == '=') {
13878                 set_yylval_id(tOROP);
13879                 lex_state = EXPR_BEG;
13880                 return tOP_ASGN;
13881             }
13882             pushback(c);
13883             return tOROP;
13884         }
13885         if (c == '=') {
13886             set_yylval_id('|');
13887             lex_state = EXPR_BEG;
13888             return tOP_ASGN;
13889         }
13890         lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG;
13891         pushback(c);
13892         return '|';
13893 
13894       case '+':
13895         c = nextc();
13896         if (IS_AFTER_OPERATOR()) {
13897             lex_state = EXPR_ARG;
13898             if (c == '@') {
13899                 return tUPLUS;
13900             }
13901             pushback(c);
13902             return '+';
13903         }
13904         if (c == '=') {
13905             set_yylval_id('+');
13906             lex_state = EXPR_BEG;
13907             return tOP_ASGN;
13908         }
13909         if (IS_BEG() || (IS_SPCARG(c) && arg_ambiguous())) {
13910             lex_state = EXPR_BEG;
13911             pushback(c);
13912             if (c != -1 && ISDIGIT(c)) {
13913                 c = '+';
13914                 goto start_num;
13915             }
13916             return tUPLUS;
13917         }
13918         lex_state = EXPR_BEG;
13919         pushback(c);
13920         warn_balanced("+", "unary operator");
13921         return '+';
13922 
13923       case '-':
13924         c = nextc();
13925         if (IS_AFTER_OPERATOR()) {
13926             lex_state = EXPR_ARG;
13927             if (c == '@') {
13928                 return tUMINUS;
13929             }
13930             pushback(c);
13931             return '-';
13932         }
13933         if (c == '=') {
13934             set_yylval_id('-');
13935             lex_state = EXPR_BEG;
13936             return tOP_ASGN;
13937         }
13938         if (c == '>') {
13939             lex_state = EXPR_ENDFN;
13940             return tLAMBDA;
13941         }
13942         if (IS_BEG() || (IS_SPCARG(c) && arg_ambiguous())) {
13943             lex_state = EXPR_BEG;
13944             pushback(c);
13945             if (c != -1 && ISDIGIT(c)) {
13946                 return tUMINUS_NUM;
13947             }
13948             return tUMINUS;
13949         }
13950         lex_state = EXPR_BEG;
13951         pushback(c);
13952         warn_balanced("-", "unary operator");
13953         return '-';
13954 
13955       case '.':
13956         lex_state = EXPR_BEG;
13957         if ((c = nextc()) == '.') {
13958             if ((c = nextc()) == '.') {
13959                 return tDOT3;
13960             }
13961             pushback(c);
13962             return tDOT2;
13963         }
13964         pushback(c);
13965         if (c != -1 && ISDIGIT(c)) {
13966             yyerror("no .<digit> floating literal anymore; put 0 before dot");
13967         }
13968         lex_state = EXPR_DOT;
13969         return '.';
13970 
13971       start_num:
13972       case '0': case '1': case '2': case '3': case '4':
13973       case '5': case '6': case '7': case '8': case '9':
13974         {
13975             int is_float, seen_point, seen_e, nondigit;
13976             int suffix;
13977 
13978             is_float = seen_point = seen_e = nondigit = 0;
13979             lex_state = EXPR_END;
13980             newtok();
13981             if (c == '-' || c == '+') {
13982                 tokadd(c);
13983                 c = nextc();
13984             }
13985             if (c == '0') {
13986 #define no_digits() do {yyerror("numeric literal without digits"); return 0;} while (0)
13987                 int start = toklen();
13988                 c = nextc();
13989                 if (c == 'x' || c == 'X') {
13990                     /* hexadecimal */
13991                     c = nextc();
13992                     if (c != -1 && ISXDIGIT(c)) {
13993                         do {
13994                             if (c == '_') {
13995                                 if (nondigit) break;
13996                                 nondigit = c;
13997                                 continue;
13998                             }
13999                             if (!ISXDIGIT(c)) break;
14000                             nondigit = 0;
14001                             tokadd(c);
14002                         } while ((c = nextc()) != -1);
14003                     }
14004                     pushback(c);
14005                     tokfix();
14006                     if (toklen() == start) {
14007                         no_digits();
14008                     }
14009                     else if (nondigit) goto trailing_uc;
14010                     suffix = number_literal_suffix(NUM_SUFFIX_ALL);
14011                     return set_integer_literal(rb_cstr_to_inum(tok(), 16, FALSE), suffix);
14012                 }
14013                 if (c == 'b' || c == 'B') {
14014                     /* binary */
14015                     c = nextc();
14016                     if (c == '0' || c == '1') {
14017                         do {
14018                             if (c == '_') {
14019                                 if (nondigit) break;
14020                                 nondigit = c;
14021                                 continue;
14022                             }
14023                             if (c != '0' && c != '1') break;
14024                             nondigit = 0;
14025                             tokadd(c);
14026                         } while ((c = nextc()) != -1);
14027                     }
14028                     pushback(c);
14029                     tokfix();
14030                     if (toklen() == start) {
14031                         no_digits();
14032                     }
14033                     else if (nondigit) goto trailing_uc;
14034                     suffix = number_literal_suffix(NUM_SUFFIX_ALL);
14035                     return set_integer_literal(rb_cstr_to_inum(tok(), 2, FALSE), suffix);
14036                 }
14037                 if (c == 'd' || c == 'D') {
14038                     /* decimal */
14039                     c = nextc();
14040                     if (c != -1 && ISDIGIT(c)) {
14041                         do {
14042                             if (c == '_') {
14043                                 if (nondigit) break;
14044                                 nondigit = c;
14045                                 continue;
14046                             }
14047                             if (!ISDIGIT(c)) break;
14048                             nondigit = 0;
14049                             tokadd(c);
14050                         } while ((c = nextc()) != -1);
14051                     }
14052                     pushback(c);
14053                     tokfix();
14054                     if (toklen() == start) {
14055                         no_digits();
14056                     }
14057                     else if (nondigit) goto trailing_uc;
14058                     suffix = number_literal_suffix(NUM_SUFFIX_ALL);
14059                     return set_integer_literal(rb_cstr_to_inum(tok(), 10, FALSE), suffix);
14060                 }
14061                 if (c == '_') {
14062                     /* 0_0 */
14063                     goto octal_number;
14064                 }
14065                 if (c == 'o' || c == 'O') {
14066                     /* prefixed octal */
14067                     c = nextc();
14068                     if (c == -1 || c == '_' || !ISDIGIT(c)) {
14069                         no_digits();
14070                     }
14071                 }
14072                 if (c >= '0' && c <= '7') {
14073                     /* octal */
14074                   octal_number:
14075                     do {
14076                         if (c == '_') {
14077                             if (nondigit) break;
14078                             nondigit = c;
14079                             continue;
14080                         }
14081                         if (c < '0' || c > '9') break;
14082                         if (c > '7') goto invalid_octal;
14083                         nondigit = 0;
14084                         tokadd(c);
14085                     } while ((c = nextc()) != -1);
14086                     if (toklen() > start) {
14087                         pushback(c);
14088                         tokfix();
14089                         if (nondigit) goto trailing_uc;
14090                         suffix = number_literal_suffix(NUM_SUFFIX_ALL);
14091                         return set_integer_literal(rb_cstr_to_inum(tok(), 8, FALSE), suffix);
14092                     }
14093                     if (nondigit) {
14094                         pushback(c);
14095                         goto trailing_uc;
14096                     }
14097                 }
14098                 if (c > '7' && c <= '9') {
14099                   invalid_octal:
14100                     yyerror("Invalid octal digit");
14101                 }
14102                 else if (c == '.' || c == 'e' || c == 'E') {
14103                     tokadd('0');
14104                 }
14105                 else {
14106                     pushback(c);
14107                     suffix = number_literal_suffix(NUM_SUFFIX_ALL);
14108                     return set_integer_literal(INT2FIX(0), suffix);
14109                 }
14110             }
14111 
14112             for (;;) {
14113                 switch (c) {
14114                   case '0': case '1': case '2': case '3': case '4':
14115                   case '5': case '6': case '7': case '8': case '9':
14116                     nondigit = 0;
14117                     tokadd(c);
14118                     break;
14119 
14120                   case '.':
14121                     if (nondigit) goto trailing_uc;
14122                     if (seen_point || seen_e) {
14123                         goto decode_num;
14124                     }
14125                     else {
14126                         int c0 = nextc();
14127                         if (c0 == -1 || !ISDIGIT(c0)) {
14128                             pushback(c0);
14129                             goto decode_num;
14130                         }
14131                         c = c0;
14132                     }
14133                     seen_point = toklen();
14134                     tokadd('.');
14135                     tokadd(c);
14136                     is_float++;
14137                     nondigit = 0;
14138                     break;
14139 
14140                   case 'e':
14141                   case 'E':
14142                     if (nondigit) {
14143                         pushback(c);
14144                         c = nondigit;
14145                         goto decode_num;
14146                     }
14147                     if (seen_e) {
14148                         goto decode_num;
14149                     }
14150                     nondigit = c;
14151                     c = nextc();
14152                     if (c != '-' && c != '+' && !ISDIGIT(c)) {
14153                         pushback(c);
14154                         nondigit = 0;
14155                         goto decode_num;
14156                     }
14157                     tokadd(nondigit);
14158                     seen_e++;
14159                     is_float++;
14160                     tokadd(c);
14161                     nondigit = (c == '-' || c == '+') ? c : 0;
14162                     break;
14163 
14164                   case '_':     /* `_' in number just ignored */
14165                     if (nondigit) goto decode_num;
14166                     nondigit = c;
14167                     break;
14168 
14169                   default:
14170                     goto decode_num;
14171                 }
14172                 c = nextc();
14173             }
14174 
14175           decode_num:
14176             pushback(c);
14177             if (nondigit) {
14178                 char tmp[30];
14179               trailing_uc:
14180                 snprintf(tmp, sizeof(tmp), "trailing `%c' in number", nondigit);
14181                 yyerror(tmp);
14182             }
14183             tokfix();
14184             if (is_float) {
14185                 int type = tFLOAT;
14186                 VALUE v;
14187 
14188                 suffix = number_literal_suffix(seen_e ? NUM_SUFFIX_I : NUM_SUFFIX_ALL);
14189                 if (suffix & NUM_SUFFIX_R) {
14190                     char *point = &tok()[seen_point];
14191                     size_t fraclen = toklen()-seen_point-1;
14192                     type = tRATIONAL;
14193                     memmove(point, point+1, fraclen+1);
14194                     v = rb_cstr_to_inum(tok(), 10, FALSE);
14195                     v = rb_rational_new(v, rb_int_positive_pow(10, fraclen));
14196                 }
14197                 else {
14198                     double d = strtod(tok(), 0);
14199                     if (errno == ERANGE) {
14200                         rb_warningS("Float %s out of range", tok());
14201                         errno = 0;
14202                     }
14203                     v = DBL2NUM(d);
14204                 }
14205                 return set_number_literal(v, type, suffix);
14206             }
14207             suffix = number_literal_suffix(NUM_SUFFIX_ALL);
14208             return set_integer_literal(rb_cstr_to_inum(tok(), 10, FALSE), suffix);
14209         }
14210 
14211       case ')':
14212       case ']':
14213         paren_nest--;
14214       case '}':
14215         COND_LEXPOP();
14216         CMDARG_LEXPOP();
14217         if (c == ')')
14218             lex_state = EXPR_ENDFN;
14219         else
14220             lex_state = EXPR_ENDARG;
14221         if (c == '}') {
14222             if (!brace_nest--) c = tSTRING_DEND;
14223         }
14224         return c;
14225 
14226       case ':':
14227         c = nextc();
14228         if (c == ':') {
14229             if (IS_BEG() || IS_lex_state(EXPR_CLASS) || IS_SPCARG(-1)) {
14230                 lex_state = EXPR_BEG;
14231                 return tCOLON3;
14232             }
14233             lex_state = EXPR_DOT;
14234             return tCOLON2;
14235         }
14236         if (IS_END() || ISSPACE(c)) {
14237             pushback(c);
14238             warn_balanced(":", "symbol literal");
14239             lex_state = EXPR_BEG;
14240             return ':';
14241         }
14242         switch (c) {
14243           case '\'':
14244             lex_strterm = NEW_STRTERM(str_ssym, c, 0);
14245             break;
14246           case '"':
14247             lex_strterm = NEW_STRTERM(str_dsym, c, 0);
14248             break;
14249           default:
14250             pushback(c);
14251             break;
14252         }
14253         lex_state = EXPR_FNAME;
14254         return tSYMBEG;
14255 
14256       case '/':
14257         if (IS_lex_state(EXPR_BEG_ANY)) {
14258             lex_strterm = NEW_STRTERM(str_regexp, '/', 0);
14259             return tREGEXP_BEG;
14260         }
14261         if ((c = nextc()) == '=') {
14262             set_yylval_id('/');
14263             lex_state = EXPR_BEG;
14264             return tOP_ASGN;
14265         }
14266         pushback(c);
14267         if (IS_SPCARG(c)) {
14268             (void)arg_ambiguous();
14269             lex_strterm = NEW_STRTERM(str_regexp, '/', 0);
14270             return tREGEXP_BEG;
14271         }
14272         lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG;
14273         warn_balanced("/", "regexp literal");
14274         return '/';
14275 
14276       case '^':
14277         if ((c = nextc()) == '=') {
14278             set_yylval_id('^');
14279             lex_state = EXPR_BEG;
14280             return tOP_ASGN;
14281         }
14282         lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG;
14283         pushback(c);
14284         return '^';
14285 
14286       case ';':
14287         lex_state = EXPR_BEG;
14288         command_start = TRUE;
14289         return ';';
14290 
14291       case ',':
14292         lex_state = EXPR_BEG;
14293         return ',';
14294 
14295       case '~':
14296         if (IS_AFTER_OPERATOR()) {
14297             if ((c = nextc()) != '@') {
14298                 pushback(c);
14299             }
14300             lex_state = EXPR_ARG;
14301         }
14302         else {
14303             lex_state = EXPR_BEG;
14304         }
14305         return '~';
14306 
14307       case '(':
14308         if (IS_BEG()) {
14309             c = tLPAREN;
14310         }
14311         else if (IS_SPCARG(-1)) {
14312             c = tLPAREN_ARG;
14313         }
14314         paren_nest++;
14315         COND_PUSH(0);
14316         CMDARG_PUSH(0);
14317         lex_state = EXPR_BEG;
14318         return c;
14319 
14320       case '[':
14321         paren_nest++;
14322         if (IS_AFTER_OPERATOR()) {
14323             lex_state = EXPR_ARG;
14324             if ((c = nextc()) == ']') {
14325                 if ((c = nextc()) == '=') {
14326                     return tASET;
14327                 }
14328                 pushback(c);
14329                 return tAREF;
14330             }
14331             pushback(c);
14332             return '[';
14333         }
14334         else if (IS_BEG()) {
14335             c = tLBRACK;
14336         }
14337         else if (IS_ARG() && space_seen) {
14338             c = tLBRACK;
14339         }
14340         lex_state = EXPR_BEG;
14341         COND_PUSH(0);
14342         CMDARG_PUSH(0);
14343         return c;
14344 
14345       case '{':
14346         ++brace_nest;
14347         if (lpar_beg && lpar_beg == paren_nest) {
14348             lex_state = EXPR_BEG;
14349             lpar_beg = 0;
14350             --paren_nest;
14351             COND_PUSH(0);
14352             CMDARG_PUSH(0);
14353             return tLAMBEG;
14354         }
14355         if (IS_ARG() || IS_lex_state(EXPR_END | EXPR_ENDFN))
14356             c = '{';          /* block (primary) */
14357         else if (IS_lex_state(EXPR_ENDARG))
14358             c = tLBRACE_ARG;  /* block (expr) */
14359         else
14360             c = tLBRACE;      /* hash */
14361         COND_PUSH(0);
14362         CMDARG_PUSH(0);
14363         lex_state = EXPR_BEG;
14364         if (c != tLBRACE) command_start = TRUE;
14365         return c;
14366 
14367       case '\\':
14368         c = nextc();
14369         if (c == '\n') {
14370             space_seen = 1;
14371 #ifdef RIPPER
14372             ripper_dispatch_scan_event(parser, tSP);
14373 #endif
14374             goto retry; /* skip \\n */
14375         }
14376         pushback(c);
14377         return '\\';
14378 
14379       case '%':
14380         if (IS_lex_state(EXPR_BEG_ANY)) {
14381             int term;
14382             int paren;
14383 
14384             c = nextc();
14385           quotation:
14386             if (c == -1 || !ISALNUM(c)) {
14387                 term = c;
14388                 c = 'Q';
14389             }
14390             else {
14391                 term = nextc();
14392                 if (rb_enc_isalnum(term, current_enc) || !parser_isascii()) {
14393                     yyerror("unknown type of %string");
14394                     return 0;
14395                 }
14396             }
14397             if (c == -1 || term == -1) {
14398                 compile_error(PARSER_ARG "unterminated quoted string meets end of file");
14399                 return 0;
14400             }
14401             paren = term;
14402             if (term == '(') term = ')';
14403             else if (term == '[') term = ']';
14404             else if (term == '{') term = '}';
14405             else if (term == '<') term = '>';
14406             else paren = 0;
14407 
14408             switch (c) {
14409               case 'Q':
14410                 lex_strterm = NEW_STRTERM(str_dquote, term, paren);
14411                 return tSTRING_BEG;
14412 
14413               case 'q':
14414                 lex_strterm = NEW_STRTERM(str_squote, term, paren);
14415                 return tSTRING_BEG;
14416 
14417               case 'W':
14418                 lex_strterm = NEW_STRTERM(str_dword, term, paren);
14419                 do {c = nextc();} while (ISSPACE(c));
14420                 pushback(c);
14421                 return tWORDS_BEG;
14422 
14423               case 'w':
14424                 lex_strterm = NEW_STRTERM(str_sword, term, paren);
14425                 do {c = nextc();} while (ISSPACE(c));
14426                 pushback(c);
14427                 return tQWORDS_BEG;
14428 
14429               case 'I':
14430                 lex_strterm = NEW_STRTERM(str_dword, term, paren);
14431                 do {c = nextc();} while (ISSPACE(c));
14432                 pushback(c);
14433                 return tSYMBOLS_BEG;
14434 
14435               case 'i':
14436                 lex_strterm = NEW_STRTERM(str_sword, term, paren);
14437                 do {c = nextc();} while (ISSPACE(c));
14438                 pushback(c);
14439                 return tQSYMBOLS_BEG;
14440 
14441               case 'x':
14442                 lex_strterm = NEW_STRTERM(str_xquote, term, paren);
14443                 return tXSTRING_BEG;
14444 
14445               case 'r':
14446                 lex_strterm = NEW_STRTERM(str_regexp, term, paren);
14447                 return tREGEXP_BEG;
14448 
14449               case 's':
14450                 lex_strterm = NEW_STRTERM(str_ssym, term, paren);
14451                 lex_state = EXPR_FNAME;
14452                 return tSYMBEG;
14453 
14454               default:
14455                 yyerror("unknown type of %string");
14456                 return 0;
14457             }
14458         }
14459         if ((c = nextc()) == '=') {
14460             set_yylval_id('%');
14461             lex_state = EXPR_BEG;
14462             return tOP_ASGN;
14463         }
14464         if (IS_SPCARG(c)) {
14465             goto quotation;
14466         }
14467         lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG;
14468         pushback(c);
14469         warn_balanced("%%", "string literal");
14470         return '%';
14471 
14472       case '$':
14473         lex_state = EXPR_END;
14474         newtok();
14475         c = nextc();
14476         switch (c) {
14477           case '_':             /* $_: last read line string */
14478             c = nextc();
14479             if (parser_is_identchar()) {
14480                 tokadd('$');
14481                 tokadd('_');
14482                 break;
14483             }
14484             pushback(c);
14485             c = '_';
14486             /* fall through */
14487           case '~':             /* $~: match-data */
14488           case '*':             /* $*: argv */
14489           case '$':             /* $$: pid */
14490           case '?':             /* $?: last status */
14491           case '!':             /* $!: error string */
14492           case '@':             /* $@: error position */
14493           case '/':             /* $/: input record separator */
14494           case '\\':            /* $\: output record separator */
14495           case ';':             /* $;: field separator */
14496           case ',':             /* $,: output field separator */
14497           case '.':             /* $.: last read line number */
14498           case '=':             /* $=: ignorecase */
14499           case ':':             /* $:: load path */
14500           case '<':             /* $<: reading filename */
14501           case '>':             /* $>: default output handle */
14502           case '\"':            /* $": already loaded files */
14503             tokadd('$');
14504             tokadd(c);
14505             goto gvar;
14506 
14507           case '-':
14508             tokadd('$');
14509             tokadd(c);
14510             c = nextc();
14511             if (parser_is_identchar()) {
14512                 if (tokadd_mbchar(c) == -1) return 0;
14513             }
14514             else {
14515                 pushback(c);
14516                 pushback('-');
14517                 return '$';
14518             }
14519           gvar:
14520             set_yylval_name(rb_intern3(tok(), tokidx, current_enc));
14521             return tGVAR;
14522 
14523           case '&':             /* $&: last match */
14524           case '`':             /* $`: string before last match */
14525           case '\'':            /* $': string after last match */
14526           case '+':             /* $+: string matches last paren. */
14527             if (IS_lex_state_for(last_state, EXPR_FNAME)) {
14528                 tokadd('$');
14529                 tokadd(c);
14530                 goto gvar;
14531             }
14532             set_yylval_node(NEW_BACK_REF(c));
14533             return tBACK_REF;
14534 
14535           case '1': case '2': case '3':
14536           case '4': case '5': case '6':
14537           case '7': case '8': case '9':
14538             tokadd('$');
14539             do {
14540                 tokadd(c);
14541                 c = nextc();
14542             } while (c != -1 && ISDIGIT(c));
14543             pushback(c);
14544             if (IS_lex_state_for(last_state, EXPR_FNAME)) goto gvar;
14545             tokfix();
14546             set_yylval_node(NEW_NTH_REF(atoi(tok()+1)));
14547             return tNTH_REF;
14548 
14549           default:
14550             if (!parser_is_identchar()) {
14551                 pushback(c);
14552                 compile_error(PARSER_ARG "`$%c' is not allowed as a global variable name", c);
14553                 return 0;
14554             }
14555           case '0':
14556             tokadd('$');
14557         }
14558         break;
14559 
14560       case '@':
14561         c = nextc();
14562         newtok();
14563         tokadd('@');
14564         if (c == '@') {
14565             tokadd('@');
14566             c = nextc();
14567         }
14568         if (c != -1 && (ISDIGIT(c) || !parser_is_identchar())) {
14569             pushback(c);
14570             if (tokidx == 1) {
14571                 compile_error(PARSER_ARG "`@%c' is not allowed as an instance variable name", c);
14572             }
14573             else {
14574                 compile_error(PARSER_ARG "`@@%c' is not allowed as a class variable name", c);
14575             }
14576             return 0;
14577         }
14578         break;
14579 
14580       case '_':
14581         if (was_bol() && whole_match_p("__END__", 7, 0)) {
14582             ruby__end__seen = 1;
14583             parser->eofp = Qtrue;
14584 #ifndef RIPPER
14585             return -1;
14586 #else
14587             lex_goto_eol(parser);
14588             ripper_dispatch_scan_event(parser, k__END__);
14589             return 0;
14590 #endif
14591         }
14592         newtok();
14593         break;
14594 
14595       default:
14596         if (!parser_is_identchar()) {
14597             compile_error(PARSER_ARG  "Invalid char `\\x%02X' in expression", c);
14598             goto retry;
14599         }
14600 
14601         newtok();
14602         break;
14603     }
14604 
14605     mb = ENC_CODERANGE_7BIT;
14606     do {
14607         if (!ISASCII(c)) mb = ENC_CODERANGE_UNKNOWN;
14608         if (tokadd_mbchar(c) == -1) return 0;
14609         c = nextc();
14610     } while (parser_is_identchar());
14611     switch (tok()[0]) {
14612       case '@': case '$':
14613         pushback(c);
14614         break;
14615       default:
14616         if ((c == '!' || c == '?') && !peek('=')) {
14617             tokadd(c);
14618         }
14619         else {
14620             pushback(c);
14621         }
14622     }
14623     tokfix();
14624 
14625     {
14626         int result = 0;
14627 
14628         last_state = lex_state;
14629         switch (tok()[0]) {
14630           case '$':
14631             lex_state = EXPR_END;
14632             result = tGVAR;
14633             break;
14634           case '@':
14635             lex_state = EXPR_END;
14636             if (tok()[1] == '@')
14637                 result = tCVAR;
14638             else
14639                 result = tIVAR;
14640             break;
14641 
14642           default:
14643             if (toklast() == '!' || toklast() == '?') {
14644                 result = tFID;
14645             }
14646             else {
14647                 if (IS_lex_state(EXPR_FNAME)) {
14648                     if ((c = nextc()) == '=' && !peek('~') && !peek('>') &&
14649                         (!peek('=') || (peek_n('>', 1)))) {
14650                         result = tIDENTIFIER;
14651                         tokadd(c);
14652                         tokfix();
14653                     }
14654                     else {
14655                         pushback(c);
14656                     }
14657                 }
14658                 if (result == 0 && ISUPPER(tok()[0])) {
14659                     result = tCONSTANT;
14660                 }
14661                 else {
14662                     result = tIDENTIFIER;
14663                 }
14664             }
14665 
14666             if (IS_LABEL_POSSIBLE()) {
14667                 if (IS_LABEL_SUFFIX(0)) {
14668                     lex_state = EXPR_LABELARG;
14669                     nextc();
14670                     set_yylval_name(TOK_INTERN(!ENC_SINGLE(mb)));
14671                     return tLABEL;
14672                 }
14673             }
14674             if (mb == ENC_CODERANGE_7BIT && !IS_lex_state(EXPR_DOT)) {
14675                 const struct kwtable *kw;
14676 
14677                 /* See if it is a reserved word.  */
14678                 kw = rb_reserved_word(tok(), toklen());
14679                 if (kw) {
14680                     enum lex_state_e state = lex_state;
14681                     lex_state = kw->state;
14682                     if (IS_lex_state_for(state, EXPR_FNAME)) {
14683                         set_yylval_name(rb_intern(kw->name));
14684                         return kw->id[0];
14685                     }
14686                     if (IS_lex_state(EXPR_BEG)) {
14687                         command_start = TRUE;
14688                     }
14689                     if (kw->id[0] == keyword_do) {
14690                         if (lpar_beg && lpar_beg == paren_nest) {
14691                             lpar_beg = 0;
14692                             --paren_nest;
14693                             return keyword_do_LAMBDA;
14694                         }
14695                         if (COND_P()) return keyword_do_cond;
14696                         if (CMDARG_P() && !IS_lex_state_for(state, EXPR_CMDARG))
14697                             return keyword_do_block;
14698                         if (IS_lex_state_for(state, (EXPR_BEG | EXPR_ENDARG)))
14699                             return keyword_do_block;
14700                         return keyword_do;
14701                     }
14702                     if (IS_lex_state_for(state, (EXPR_BEG | EXPR_VALUE | EXPR_LABELARG)))
14703                         return kw->id[0];
14704                     else {
14705                         if (kw->id[0] != kw->id[1])
14706                             lex_state = EXPR_BEG;
14707                         return kw->id[1];
14708                     }
14709                 }
14710             }
14711 
14712             if (IS_lex_state(EXPR_BEG_ANY | EXPR_ARG_ANY | EXPR_DOT)) {
14713                 if (cmd_state) {
14714                     lex_state = EXPR_CMDARG;
14715                 }
14716                 else {
14717                     lex_state = EXPR_ARG;
14718                 }
14719             }
14720             else if (lex_state == EXPR_FNAME) {
14721                 lex_state = EXPR_ENDFN;
14722             }
14723             else {
14724                 lex_state = EXPR_END;
14725             }
14726         }
14727         {
14728             ID ident = TOK_INTERN(!ENC_SINGLE(mb));
14729 
14730             set_yylval_name(ident);
14731             if (!IS_lex_state_for(last_state, EXPR_DOT|EXPR_FNAME) &&
14732                 is_local_id(ident) && lvar_defined(ident)) {
14733                 lex_state = EXPR_END;
14734             }
14735         }
14736         return result;
14737     }
14738 }
14739 
14740 #if YYPURE
14741 static int
14742 yylex(void *lval, void *p)
14743 #else
14744 yylex(void *p)
14745 #endif
14746 {
14747     struct parser_params *parser = (struct parser_params*)p;
14748     int t;
14749 
14750 #if YYPURE
14751     parser->parser_yylval = lval;
14752     parser->parser_yylval->val = Qundef;
14753 #endif
14754     t = parser_yylex(parser);
14755 #ifdef RIPPER
14756     if (!NIL_P(parser->delayed)) {
14757         ripper_dispatch_delayed_token(parser, t);
14758         return t;
14759     }
14760     if (t != 0)
14761         ripper_dispatch_scan_event(parser, t);
14762 #endif
14763 
14764     return t;
14765 }
14766 
14767 #ifndef RIPPER
14768 static NODE*
14769 node_newnode(struct parser_params *parser, enum node_type type, VALUE a0, VALUE a1, VALUE a2)
14770 {
14771     NODE *n = (rb_node_newnode)(type, a0, a1, a2);
14772     nd_set_line(n, ruby_sourceline);
14773     return n;
14774 }
14775 
14776 static enum node_type
14777 nodetype(NODE *node)                    /* for debug */
14778 {
14779     return (enum node_type)nd_type(node);
14780 }
14781 
14782 static int
14783 nodeline(NODE *node)
14784 {
14785     return nd_line(node);
14786 }
14787 
14788 static NODE*
14789 newline_node(NODE *node)
14790 {
14791     if (node) {
14792         node = remove_begin(node);
14793         node->flags |= NODE_FL_NEWLINE;
14794     }
14795     return node;
14796 }
14797 
14798 static void
14799 fixpos(NODE *node, NODE *orig)
14800 {
14801     if (!node) return;
14802     if (!orig) return;
14803     if (orig == (NODE*)1) return;
14804     nd_set_line(node, nd_line(orig));
14805 }
14806 
14807 static void
14808 parser_warning(struct parser_params *parser, NODE *node, const char *mesg)
14809 {
14810     rb_compile_warning(ruby_sourcefile, nd_line(node), "%s", mesg);
14811 }
14812 #define parser_warning(node, mesg) parser_warning(parser, (node), (mesg))
14813 
14814 static void
14815 parser_warn(struct parser_params *parser, NODE *node, const char *mesg)
14816 {
14817     rb_compile_warn(ruby_sourcefile, nd_line(node), "%s", mesg);
14818 }
14819 #define parser_warn(node, mesg) parser_warn(parser, (node), (mesg))
14820 
14821 static NODE*
14822 block_append_gen(struct parser_params *parser, NODE *head, NODE *tail)
14823 {
14824     NODE *end, *h = head, *nd;
14825 
14826     if (tail == 0) return head;
14827 
14828     if (h == 0) return tail;
14829     switch (nd_type(h)) {
14830       case NODE_LIT:
14831       case NODE_STR:
14832       case NODE_SELF:
14833       case NODE_TRUE:
14834       case NODE_FALSE:
14835       case NODE_NIL:
14836         parser_warning(h, "unused literal ignored");
14837         return tail;
14838       default:
14839         h = end = NEW_BLOCK(head);
14840         end->nd_end = end;
14841         fixpos(end, head);
14842         head = end;
14843         break;
14844       case NODE_BLOCK:
14845         end = h->nd_end;
14846         break;
14847     }
14848 
14849     nd = end->nd_head;
14850     switch (nd_type(nd)) {
14851       case NODE_RETURN:
14852       case NODE_BREAK:
14853       case NODE_NEXT:
14854       case NODE_REDO:
14855       case NODE_RETRY:
14856         if (RTEST(ruby_verbose)) {
14857             parser_warning(tail, "statement not reached");
14858         }
14859         break;
14860 
14861       default:
14862         break;
14863     }
14864 
14865     if (nd_type(tail) != NODE_BLOCK) {
14866         tail = NEW_BLOCK(tail);
14867         tail->nd_end = tail;
14868     }
14869     end->nd_next = tail;
14870     h->nd_end = tail->nd_end;
14871     return head;
14872 }
14873 
14874 /* append item to the list */
14875 static NODE*
14876 list_append_gen(struct parser_params *parser, NODE *list, NODE *item)
14877 {
14878     NODE *last;
14879 
14880     if (list == 0) return NEW_LIST(item);
14881     if (list->nd_next) {
14882         last = list->nd_next->nd_end;
14883     }
14884     else {
14885         last = list;
14886     }
14887 
14888     list->nd_alen += 1;
14889     last->nd_next = NEW_LIST(item);
14890     list->nd_next->nd_end = last->nd_next;
14891     return list;
14892 }
14893 
14894 /* concat two lists */
14895 static NODE*
14896 list_concat_gen(struct parser_params *parser, NODE *head, NODE *tail)
14897 {
14898     NODE *last;
14899 
14900     if (head->nd_next) {
14901         last = head->nd_next->nd_end;
14902     }
14903     else {
14904         last = head;
14905     }
14906 
14907     head->nd_alen += tail->nd_alen;
14908     last->nd_next = tail;
14909     if (tail->nd_next) {
14910         head->nd_next->nd_end = tail->nd_next->nd_end;
14911     }
14912     else {
14913         head->nd_next->nd_end = tail;
14914     }
14915 
14916     return head;
14917 }
14918 
14919 static int
14920 literal_concat0(struct parser_params *parser, VALUE head, VALUE tail)
14921 {
14922     if (NIL_P(tail)) return 1;
14923     if (!rb_enc_compatible(head, tail)) {
14924         compile_error(PARSER_ARG "string literal encodings differ (%s / %s)",
14925                       rb_enc_name(rb_enc_get(head)),
14926                       rb_enc_name(rb_enc_get(tail)));
14927         rb_str_resize(head, 0);
14928         rb_str_resize(tail, 0);
14929         return 0;
14930     }
14931     rb_str_buf_append(head, tail);
14932     return 1;
14933 }
14934 
14935 /* concat two string literals */
14936 static NODE *
14937 literal_concat_gen(struct parser_params *parser, NODE *head, NODE *tail)
14938 {
14939     enum node_type htype;
14940     NODE *headlast;
14941     VALUE lit;
14942 
14943     if (!head) return tail;
14944     if (!tail) return head;
14945 
14946     htype = nd_type(head);
14947     if (htype == NODE_EVSTR) {
14948         NODE *node = NEW_DSTR(Qnil);
14949         head = list_append(node, head);
14950         htype = NODE_DSTR;
14951     }
14952     switch (nd_type(tail)) {
14953       case NODE_STR:
14954         if (htype == NODE_DSTR && (headlast = head->nd_next->nd_end->nd_head) &&
14955             nd_type(headlast) == NODE_STR) {
14956             htype = NODE_STR;
14957             lit = headlast->nd_lit;
14958         }
14959         else {
14960             lit = head->nd_lit;
14961         }
14962         if (htype == NODE_STR) {
14963             if (!literal_concat0(parser, lit, tail->nd_lit)) {
14964               error:
14965                 rb_gc_force_recycle((VALUE)head);
14966                 rb_gc_force_recycle((VALUE)tail);
14967                 return 0;
14968             }
14969             rb_gc_force_recycle((VALUE)tail);
14970         }
14971         else {
14972             list_append(head, tail);
14973         }
14974         break;
14975 
14976       case NODE_DSTR:
14977         if (htype == NODE_STR) {
14978             if (!literal_concat0(parser, head->nd_lit, tail->nd_lit))
14979                 goto error;
14980             tail->nd_lit = head->nd_lit;
14981             rb_gc_force_recycle((VALUE)head);
14982             head = tail;
14983         }
14984         else if (NIL_P(tail->nd_lit)) {
14985           append:
14986             head->nd_alen += tail->nd_alen - 1;
14987             head->nd_next->nd_end->nd_next = tail->nd_next;
14988             head->nd_next->nd_end = tail->nd_next->nd_end;
14989             rb_gc_force_recycle((VALUE)tail);
14990         }
14991         else if (htype == NODE_DSTR && (headlast = head->nd_next->nd_end->nd_head) &&
14992                  nd_type(headlast) == NODE_STR) {
14993             lit = headlast->nd_lit;
14994             if (!literal_concat0(parser, lit, tail->nd_lit))
14995                 goto error;
14996             tail->nd_lit = Qnil;
14997             goto append;
14998         }
14999         else {
15000             nd_set_type(tail, NODE_ARRAY);
15001             tail->nd_head = NEW_STR(tail->nd_lit);
15002             list_concat(head, tail);
15003         }
15004         break;
15005 
15006       case NODE_EVSTR:
15007         if (htype == NODE_STR) {
15008             nd_set_type(head, NODE_DSTR);
15009             head->nd_alen = 1;
15010         }
15011         list_append(head, tail);
15012         break;
15013     }
15014     return head;
15015 }
15016 
15017 static NODE *
15018 evstr2dstr_gen(struct parser_params *parser, NODE *node)
15019 {
15020     if (nd_type(node) == NODE_EVSTR) {
15021         node = list_append(NEW_DSTR(Qnil), node);
15022     }
15023     return node;
15024 }
15025 
15026 static NODE *
15027 new_evstr_gen(struct parser_params *parser, NODE *node)
15028 {
15029     NODE *head = node;
15030 
15031     if (node) {
15032         switch (nd_type(node)) {
15033           case NODE_STR: case NODE_DSTR: case NODE_EVSTR:
15034             return node;
15035         }
15036     }
15037     return NEW_EVSTR(head);
15038 }
15039 
15040 static NODE *
15041 call_bin_op_gen(struct parser_params *parser, NODE *recv, ID id, NODE *arg1)
15042 {
15043     value_expr(recv);
15044     value_expr(arg1);
15045     return NEW_CALL(recv, id, NEW_LIST(arg1));
15046 }
15047 
15048 static NODE *
15049 call_uni_op_gen(struct parser_params *parser, NODE *recv, ID id)
15050 {
15051     value_expr(recv);
15052     return NEW_CALL(recv, id, 0);
15053 }
15054 
15055 static NODE*
15056 match_op_gen(struct parser_params *parser, NODE *node1, NODE *node2)
15057 {
15058     value_expr(node1);
15059     value_expr(node2);
15060     if (node1) {
15061         switch (nd_type(node1)) {
15062           case NODE_DREGX:
15063           case NODE_DREGX_ONCE:
15064             return NEW_MATCH2(node1, node2);
15065 
15066           case NODE_LIT:
15067             if (RB_TYPE_P(node1->nd_lit, T_REGEXP)) {
15068                 return NEW_MATCH2(node1, node2);
15069             }
15070         }
15071     }
15072 
15073     if (node2) {
15074         switch (nd_type(node2)) {
15075           case NODE_DREGX:
15076           case NODE_DREGX_ONCE:
15077             return NEW_MATCH3(node2, node1);
15078 
15079           case NODE_LIT:
15080             if (RB_TYPE_P(node2->nd_lit, T_REGEXP)) {
15081                 return NEW_MATCH3(node2, node1);
15082             }
15083         }
15084     }
15085 
15086     return NEW_CALL(node1, tMATCH, NEW_LIST(node2));
15087 }
15088 
15089 static NODE*
15090 gettable_gen(struct parser_params *parser, ID id)
15091 {
15092     switch (id) {
15093       case keyword_self:
15094         return NEW_SELF();
15095       case keyword_nil:
15096         return NEW_NIL();
15097       case keyword_true:
15098         return NEW_TRUE();
15099       case keyword_false:
15100         return NEW_FALSE();
15101       case keyword__FILE__:
15102         return NEW_STR(rb_str_dup(ruby_sourcefile_string));
15103       case keyword__LINE__:
15104         return NEW_LIT(INT2FIX(tokline));
15105       case keyword__ENCODING__:
15106         return NEW_LIT(rb_enc_from_encoding(current_enc));
15107     }
15108     switch (id_type(id)) {
15109       case ID_LOCAL:
15110         if (dyna_in_block() && dvar_defined(id)) return NEW_DVAR(id);
15111         if (local_id(id)) return NEW_LVAR(id);
15112         /* method call without arguments */
15113         return NEW_VCALL(id);
15114       case ID_GLOBAL:
15115         return NEW_GVAR(id);
15116       case ID_INSTANCE:
15117         return NEW_IVAR(id);
15118       case ID_CONST:
15119         return NEW_CONST(id);
15120       case ID_CLASS:
15121         return NEW_CVAR(id);
15122     }
15123     compile_error(PARSER_ARG "identifier %s is not valid to get", rb_id2name(id));
15124     return 0;
15125 }
15126 #else  /* !RIPPER */
15127 static int
15128 id_is_var_gen(struct parser_params *parser, ID id)
15129 {
15130     if (is_notop_id(id)) {
15131         switch (id & ID_SCOPE_MASK) {
15132           case ID_GLOBAL: case ID_INSTANCE: case ID_CONST: case ID_CLASS:
15133             return 1;
15134           case ID_LOCAL:
15135             if (dyna_in_block() && dvar_defined(id)) return 1;
15136             if (local_id(id)) return 1;
15137             /* method call without arguments */
15138             return 0;
15139         }
15140     }
15141     compile_error(PARSER_ARG "identifier %s is not valid to get", rb_id2name(id));
15142     return 0;
15143 }
15144 #endif /* !RIPPER */
15145 
15146 #if PARSER_DEBUG
15147 static const char *
15148 lex_state_name(enum lex_state_e state)
15149 {
15150     static const char names[][12] = {
15151         "EXPR_BEG",    "EXPR_END",    "EXPR_ENDARG", "EXPR_ENDFN",  "EXPR_ARG",
15152         "EXPR_CMDARG", "EXPR_MID",    "EXPR_FNAME",  "EXPR_DOT",    "EXPR_CLASS",
15153         "EXPR_VALUE",
15154     };
15155 
15156     if ((unsigned)state & ~(~0u << EXPR_MAX_STATE))
15157         return names[ffs(state)];
15158     return NULL;
15159 }
15160 #endif
15161 
15162 #ifdef RIPPER
15163 static VALUE
15164 assignable_gen(struct parser_params *parser, VALUE lhs)
15165 #else
15166 static NODE*
15167 assignable_gen(struct parser_params *parser, ID id, NODE *val)
15168 #endif
15169 {
15170 #ifdef RIPPER
15171     ID id = get_id(lhs);
15172 # define assignable_result(x) get_value(lhs)
15173 # define parser_yyerror(parser, x) dispatch1(assign_error, lhs)
15174 #else
15175 # define assignable_result(x) (x)
15176 #endif
15177     if (!id) return assignable_result(0);
15178     switch (id) {
15179       case keyword_self:
15180         yyerror("Can't change the value of self");
15181         goto error;
15182       case keyword_nil:
15183         yyerror("Can't assign to nil");
15184         goto error;
15185       case keyword_true:
15186         yyerror("Can't assign to true");
15187         goto error;
15188       case keyword_false:
15189         yyerror("Can't assign to false");
15190         goto error;
15191       case keyword__FILE__:
15192         yyerror("Can't assign to __FILE__");
15193         goto error;
15194       case keyword__LINE__:
15195         yyerror("Can't assign to __LINE__");
15196         goto error;
15197       case keyword__ENCODING__:
15198         yyerror("Can't assign to __ENCODING__");
15199         goto error;
15200     }
15201     switch (id_type(id)) {
15202       case ID_LOCAL:
15203         if (dyna_in_block()) {
15204             if (dvar_curr(id)) {
15205                 return assignable_result(NEW_DASGN_CURR(id, val));
15206             }
15207             else if (dvar_defined(id)) {
15208                 return assignable_result(NEW_DASGN(id, val));
15209             }
15210             else if (local_id(id)) {
15211                 return assignable_result(NEW_LASGN(id, val));
15212             }
15213             else {
15214                 dyna_var(id);
15215                 return assignable_result(NEW_DASGN_CURR(id, val));
15216             }
15217         }
15218         else {
15219             if (!local_id(id)) {
15220                 local_var(id);
15221             }
15222             return assignable_result(NEW_LASGN(id, val));
15223         }
15224         break;
15225       case ID_GLOBAL:
15226         return assignable_result(NEW_GASGN(id, val));
15227       case ID_INSTANCE:
15228         return assignable_result(NEW_IASGN(id, val));
15229       case ID_CONST:
15230         if (!in_def && !in_single)
15231             return assignable_result(NEW_CDECL(id, val, 0));
15232         yyerror("dynamic constant assignment");
15233         break;
15234       case ID_CLASS:
15235         return assignable_result(NEW_CVASGN(id, val));
15236       default:
15237         compile_error(PARSER_ARG "identifier %s is not valid to set", rb_id2name(id));
15238     }
15239   error:
15240     return assignable_result(0);
15241 #undef assignable_result
15242 #undef parser_yyerror
15243 }
15244 
15245 static int
15246 is_private_local_id(ID name)
15247 {
15248     VALUE s;
15249     if (name == idUScore) return 1;
15250     if (!is_local_id(name)) return 0;
15251     s = rb_id2str(name);
15252     if (!s) return 0;
15253     return RSTRING_PTR(s)[0] == '_';
15254 }
15255 
15256 #define LVAR_USED ((ID)1 << (sizeof(ID) * CHAR_BIT - 1))
15257 
15258 static int
15259 shadowing_lvar_0(struct parser_params *parser, ID name)
15260 {
15261     if (is_private_local_id(name)) return 1;
15262     if (dyna_in_block()) {
15263         if (dvar_curr(name)) {
15264             yyerror("duplicated argument name");
15265         }
15266         else if (dvar_defined_get(name) || local_id(name)) {
15267             rb_warningS("shadowing outer local variable - %s", rb_id2name(name));
15268             vtable_add(lvtbl->vars, name);
15269             if (lvtbl->used) {
15270                 vtable_add(lvtbl->used, (ID)ruby_sourceline | LVAR_USED);
15271             }
15272             return 0;
15273         }
15274     }
15275     else {
15276         if (local_id(name)) {
15277             yyerror("duplicated argument name");
15278         }
15279     }
15280     return 1;
15281 }
15282 
15283 static ID
15284 shadowing_lvar_gen(struct parser_params *parser, ID name)
15285 {
15286     shadowing_lvar_0(parser, name);
15287     return name;
15288 }
15289 
15290 static void
15291 new_bv_gen(struct parser_params *parser, ID name)
15292 {
15293     if (!name) return;
15294     if (!is_local_id(name)) {
15295         compile_error(PARSER_ARG "invalid local variable - %s",
15296                       rb_id2name(name));
15297         return;
15298     }
15299     if (!shadowing_lvar_0(parser, name)) return;
15300     dyna_var(name);
15301 }
15302 
15303 #ifndef RIPPER
15304 static NODE *
15305 aryset_gen(struct parser_params *parser, NODE *recv, NODE *idx)
15306 {
15307     if (recv && nd_type(recv) == NODE_SELF)
15308         recv = (NODE *)1;
15309     return NEW_ATTRASGN(recv, tASET, idx);
15310 }
15311 
15312 static void
15313 block_dup_check_gen(struct parser_params *parser, NODE *node1, NODE *node2)
15314 {
15315     if (node2 && node1 && nd_type(node1) == NODE_BLOCK_PASS) {
15316         compile_error(PARSER_ARG "both block arg and actual block given");
15317     }
15318 }
15319 
15320 static const char id_type_names[][9] = {
15321     "LOCAL",
15322     "INSTANCE",
15323     "",                         /* INSTANCE2 */
15324     "GLOBAL",
15325     "ATTRSET",
15326     "CONST",
15327     "CLASS",
15328     "JUNK",
15329 };
15330 
15331 ID
15332 rb_id_attrset(ID id)
15333 {
15334     if (!is_notop_id(id)) {
15335         switch (id) {
15336           case tAREF: case tASET:
15337             return tASET;       /* only exception */
15338         }
15339         rb_name_error(id, "cannot make operator ID :%s attrset", rb_id2name(id));
15340     }
15341     else {
15342         int scope = (int)(id & ID_SCOPE_MASK);
15343         switch (scope) {
15344           case ID_LOCAL: case ID_INSTANCE: case ID_GLOBAL:
15345           case ID_CONST: case ID_CLASS: case ID_JUNK:
15346             break;
15347           case ID_ATTRSET:
15348             return id;
15349           default:
15350             rb_name_error(id, "cannot make %s ID %+"PRIsVALUE" attrset",
15351                           id_type_names[scope], ID2SYM(id));
15352 
15353         }
15354     }
15355     id &= ~ID_SCOPE_MASK;
15356     id |= ID_ATTRSET;
15357     return id;
15358 }
15359 
15360 static NODE *
15361 attrset_gen(struct parser_params *parser, NODE *recv, ID id)
15362 {
15363     if (recv && nd_type(recv) == NODE_SELF)
15364         recv = (NODE *)1;
15365     return NEW_ATTRASGN(recv, rb_id_attrset(id), 0);
15366 }
15367 
15368 static void
15369 rb_backref_error_gen(struct parser_params *parser, NODE *node)
15370 {
15371     switch (nd_type(node)) {
15372       case NODE_NTH_REF:
15373         compile_error(PARSER_ARG "Can't set variable $%ld", node->nd_nth);
15374         break;
15375       case NODE_BACK_REF:
15376         compile_error(PARSER_ARG "Can't set variable $%c", (int)node->nd_nth);
15377         break;
15378     }
15379 }
15380 
15381 static NODE *
15382 arg_concat_gen(struct parser_params *parser, NODE *node1, NODE *node2)
15383 {
15384     if (!node2) return node1;
15385     switch (nd_type(node1)) {
15386       case NODE_BLOCK_PASS:
15387         if (node1->nd_head)
15388             node1->nd_head = arg_concat(node1->nd_head, node2);
15389         else
15390             node1->nd_head = NEW_LIST(node2);
15391         return node1;
15392       case NODE_ARGSPUSH:
15393         if (nd_type(node2) != NODE_ARRAY) break;
15394         node1->nd_body = list_concat(NEW_LIST(node1->nd_body), node2);
15395         nd_set_type(node1, NODE_ARGSCAT);
15396         return node1;
15397       case NODE_ARGSCAT:
15398         if (nd_type(node2) != NODE_ARRAY ||
15399             nd_type(node1->nd_body) != NODE_ARRAY) break;
15400         node1->nd_body = list_concat(node1->nd_body, node2);
15401         return node1;
15402     }
15403     return NEW_ARGSCAT(node1, node2);
15404 }
15405 
15406 static NODE *
15407 arg_append_gen(struct parser_params *parser, NODE *node1, NODE *node2)
15408 {
15409     if (!node1) return NEW_LIST(node2);
15410     switch (nd_type(node1))  {
15411       case NODE_ARRAY:
15412         return list_append(node1, node2);
15413       case NODE_BLOCK_PASS:
15414         node1->nd_head = arg_append(node1->nd_head, node2);
15415         return node1;
15416       case NODE_ARGSPUSH:
15417         node1->nd_body = list_append(NEW_LIST(node1->nd_body), node2);
15418         nd_set_type(node1, NODE_ARGSCAT);
15419         return node1;
15420     }
15421     return NEW_ARGSPUSH(node1, node2);
15422 }
15423 
15424 static NODE *
15425 splat_array(NODE* node)
15426 {
15427     if (nd_type(node) == NODE_SPLAT) node = node->nd_head;
15428     if (nd_type(node) == NODE_ARRAY) return node;
15429     return 0;
15430 }
15431 
15432 static NODE *
15433 node_assign_gen(struct parser_params *parser, NODE *lhs, NODE *rhs)
15434 {
15435     if (!lhs) return 0;
15436 
15437     switch (nd_type(lhs)) {
15438       case NODE_GASGN:
15439       case NODE_IASGN:
15440       case NODE_IASGN2:
15441       case NODE_LASGN:
15442       case NODE_DASGN:
15443       case NODE_DASGN_CURR:
15444       case NODE_MASGN:
15445       case NODE_CDECL:
15446       case NODE_CVASGN:
15447         lhs->nd_value = rhs;
15448         break;
15449 
15450       case NODE_ATTRASGN:
15451       case NODE_CALL:
15452         lhs->nd_args = arg_append(lhs->nd_args, rhs);
15453         break;
15454 
15455       default:
15456         /* should not happen */
15457         break;
15458     }
15459 
15460     return lhs;
15461 }
15462 
15463 static int
15464 value_expr_gen(struct parser_params *parser, NODE *node)
15465 {
15466     int cond = 0;
15467 
15468     if (!node) {
15469         rb_warning0("empty expression");
15470     }
15471     while (node) {
15472         switch (nd_type(node)) {
15473           case NODE_RETURN:
15474           case NODE_BREAK:
15475           case NODE_NEXT:
15476           case NODE_REDO:
15477           case NODE_RETRY:
15478             if (!cond) yyerror("void value expression");
15479             /* or "control never reach"? */
15480             return FALSE;
15481 
15482           case NODE_BLOCK:
15483             while (node->nd_next) {
15484                 node = node->nd_next;
15485             }
15486             node = node->nd_head;
15487             break;
15488 
15489           case NODE_BEGIN:
15490             node = node->nd_body;
15491             break;
15492 
15493           case NODE_IF:
15494             if (!node->nd_body) {
15495                 node = node->nd_else;
15496                 break;
15497             }
15498             else if (!node->nd_else) {
15499                 node = node->nd_body;
15500                 break;
15501             }
15502             if (!value_expr(node->nd_body)) return FALSE;
15503             node = node->nd_else;
15504             break;
15505 
15506           case NODE_AND:
15507           case NODE_OR:
15508             cond = 1;
15509             node = node->nd_2nd;
15510             break;
15511 
15512           default:
15513             return TRUE;
15514         }
15515     }
15516 
15517     return TRUE;
15518 }
15519 
15520 static void
15521 void_expr_gen(struct parser_params *parser, NODE *node)
15522 {
15523     const char *useless = 0;
15524 
15525     if (!RTEST(ruby_verbose)) return;
15526 
15527     if (!node) return;
15528     switch (nd_type(node)) {
15529       case NODE_CALL:
15530         switch (node->nd_mid) {
15531           case '+':
15532           case '-':
15533           case '*':
15534           case '/':
15535           case '%':
15536           case tPOW:
15537           case tUPLUS:
15538           case tUMINUS:
15539           case '|':
15540           case '^':
15541           case '&':
15542           case tCMP:
15543           case '>':
15544           case tGEQ:
15545           case '<':
15546           case tLEQ:
15547           case tEQ:
15548           case tNEQ:
15549             useless = rb_id2name(node->nd_mid);
15550             break;
15551         }
15552         break;
15553 
15554       case NODE_LVAR:
15555       case NODE_DVAR:
15556       case NODE_GVAR:
15557       case NODE_IVAR:
15558       case NODE_CVAR:
15559       case NODE_NTH_REF:
15560       case NODE_BACK_REF:
15561         useless = "a variable";
15562         break;
15563       case NODE_CONST:
15564         useless = "a constant";
15565         break;
15566       case NODE_LIT:
15567       case NODE_STR:
15568       case NODE_DSTR:
15569       case NODE_DREGX:
15570       case NODE_DREGX_ONCE:
15571         useless = "a literal";
15572         break;
15573       case NODE_COLON2:
15574       case NODE_COLON3:
15575         useless = "::";
15576         break;
15577       case NODE_DOT2:
15578         useless = "..";
15579         break;
15580       case NODE_DOT3:
15581         useless = "...";
15582         break;
15583       case NODE_SELF:
15584         useless = "self";
15585         break;
15586       case NODE_NIL:
15587         useless = "nil";
15588         break;
15589       case NODE_TRUE:
15590         useless = "true";
15591         break;
15592       case NODE_FALSE:
15593         useless = "false";
15594         break;
15595       case NODE_DEFINED:
15596         useless = "defined?";
15597         break;
15598     }
15599 
15600     if (useless) {
15601         int line = ruby_sourceline;
15602 
15603         ruby_sourceline = nd_line(node);
15604         rb_warnS("possibly useless use of %s in void context", useless);
15605         ruby_sourceline = line;
15606     }
15607 }
15608 
15609 static void
15610 void_stmts_gen(struct parser_params *parser, NODE *node)
15611 {
15612     if (!RTEST(ruby_verbose)) return;
15613     if (!node) return;
15614     if (nd_type(node) != NODE_BLOCK) return;
15615 
15616     for (;;) {
15617         if (!node->nd_next) return;
15618         void_expr0(node->nd_head);
15619         node = node->nd_next;
15620     }
15621 }
15622 
15623 static NODE *
15624 remove_begin(NODE *node)
15625 {
15626     NODE **n = &node, *n1 = node;
15627     while (n1 && nd_type(n1) == NODE_BEGIN && n1->nd_body) {
15628         *n = n1 = n1->nd_body;
15629     }
15630     return node;
15631 }
15632 
15633 static NODE *
15634 remove_begin_all(NODE *node)
15635 {
15636     NODE **n = &node, *n1 = node;
15637     while (n1 && nd_type(n1) == NODE_BEGIN) {
15638         *n = n1 = n1->nd_body;
15639     }
15640     return node;
15641 }
15642 
15643 static void
15644 reduce_nodes_gen(struct parser_params *parser, NODE **body)
15645 {
15646     NODE *node = *body;
15647 
15648     if (!node) {
15649         *body = NEW_NIL();
15650         return;
15651     }
15652 #define subnodes(n1, n2) \
15653     ((!node->n1) ? (node->n2 ? (body = &node->n2, 1) : 0) : \
15654      (!node->n2) ? (body = &node->n1, 1) : \
15655      (reduce_nodes(&node->n1), body = &node->n2, 1))
15656 
15657     while (node) {
15658         int newline = (int)(node->flags & NODE_FL_NEWLINE);
15659         switch (nd_type(node)) {
15660           end:
15661           case NODE_NIL:
15662             *body = 0;
15663             return;
15664           case NODE_RETURN:
15665             *body = node = node->nd_stts;
15666             if (newline && node) node->flags |= NODE_FL_NEWLINE;
15667             continue;
15668           case NODE_BEGIN:
15669             *body = node = node->nd_body;
15670             if (newline && node) node->flags |= NODE_FL_NEWLINE;
15671             continue;
15672           case NODE_BLOCK:
15673             body = &node->nd_end->nd_head;
15674             break;
15675           case NODE_IF:
15676             if (subnodes(nd_body, nd_else)) break;
15677             return;
15678           case NODE_CASE:
15679             body = &node->nd_body;
15680             break;
15681           case NODE_WHEN:
15682             if (!subnodes(nd_body, nd_next)) goto end;
15683             break;
15684           case NODE_ENSURE:
15685             if (!subnodes(nd_head, nd_resq)) goto end;
15686             break;
15687           case NODE_RESCUE:
15688             if (node->nd_else) {
15689                 body = &node->nd_resq;
15690                 break;
15691             }
15692             if (!subnodes(nd_head, nd_resq)) goto end;
15693             break;
15694           default:
15695             return;
15696         }
15697         node = *body;
15698         if (newline && node) node->flags |= NODE_FL_NEWLINE;
15699     }
15700 
15701 #undef subnodes
15702 }
15703 
15704 static int
15705 is_static_content(NODE *node)
15706 {
15707     if (!node) return 1;
15708     switch (nd_type(node)) {
15709       case NODE_HASH:
15710         if (!(node = node->nd_head)) break;
15711       case NODE_ARRAY:
15712         do {
15713             if (!is_static_content(node->nd_head)) return 0;
15714         } while ((node = node->nd_next) != 0);
15715       case NODE_LIT:
15716       case NODE_STR:
15717       case NODE_NIL:
15718       case NODE_TRUE:
15719       case NODE_FALSE:
15720       case NODE_ZARRAY:
15721         break;
15722       default:
15723         return 0;
15724     }
15725     return 1;
15726 }
15727 
15728 static int
15729 assign_in_cond(struct parser_params *parser, NODE *node)
15730 {
15731     switch (nd_type(node)) {
15732       case NODE_MASGN:
15733         yyerror("multiple assignment in conditional");
15734         return 1;
15735 
15736       case NODE_LASGN:
15737       case NODE_DASGN:
15738       case NODE_DASGN_CURR:
15739       case NODE_GASGN:
15740       case NODE_IASGN:
15741         break;
15742 
15743       default:
15744         return 0;
15745     }
15746 
15747     if (!node->nd_value) return 1;
15748     if (is_static_content(node->nd_value)) {
15749         /* reports always */
15750         parser_warn(node->nd_value, "found = in conditional, should be ==");
15751     }
15752     return 1;
15753 }
15754 
15755 static void
15756 warn_unless_e_option(struct parser_params *parser, NODE *node, const char *str)
15757 {
15758     if (!e_option_supplied(parser)) parser_warn(node, str);
15759 }
15760 
15761 static void
15762 warning_unless_e_option(struct parser_params *parser, NODE *node, const char *str)
15763 {
15764     if (!e_option_supplied(parser)) parser_warning(node, str);
15765 }
15766 
15767 static void
15768 fixup_nodes(NODE **rootnode)
15769 {
15770     NODE *node, *next, *head;
15771 
15772     for (node = *rootnode; node; node = next) {
15773         enum node_type type;
15774         VALUE val;
15775 
15776         next = node->nd_next;
15777         head = node->nd_head;
15778         rb_gc_force_recycle((VALUE)node);
15779         *rootnode = next;
15780         switch (type = nd_type(head)) {
15781           case NODE_DOT2:
15782           case NODE_DOT3:
15783             val = rb_range_new(head->nd_beg->nd_lit, head->nd_end->nd_lit,
15784                                type == NODE_DOT3);
15785             rb_gc_force_recycle((VALUE)head->nd_beg);
15786             rb_gc_force_recycle((VALUE)head->nd_end);
15787             nd_set_type(head, NODE_LIT);
15788             head->nd_lit = val;
15789             break;
15790           default:
15791             break;
15792         }
15793     }
15794 }
15795 
15796 static NODE *cond0(struct parser_params*,NODE*);
15797 
15798 static NODE*
15799 range_op(struct parser_params *parser, NODE *node)
15800 {
15801     enum node_type type;
15802 
15803     if (node == 0) return 0;
15804 
15805     type = nd_type(node);
15806     value_expr(node);
15807     if (type == NODE_LIT && FIXNUM_P(node->nd_lit)) {
15808         warn_unless_e_option(parser, node, "integer literal in conditional range");
15809         return NEW_CALL(node, tEQ, NEW_LIST(NEW_GVAR(rb_intern("$."))));
15810     }
15811     return cond0(parser, node);
15812 }
15813 
15814 static int
15815 literal_node(NODE *node)
15816 {
15817     if (!node) return 1;        /* same as NODE_NIL */
15818     switch (nd_type(node)) {
15819       case NODE_LIT:
15820       case NODE_STR:
15821       case NODE_DSTR:
15822       case NODE_EVSTR:
15823       case NODE_DREGX:
15824       case NODE_DREGX_ONCE:
15825       case NODE_DSYM:
15826         return 2;
15827       case NODE_TRUE:
15828       case NODE_FALSE:
15829       case NODE_NIL:
15830         return 1;
15831     }
15832     return 0;
15833 }
15834 
15835 static NODE*
15836 cond0(struct parser_params *parser, NODE *node)
15837 {
15838     if (node == 0) return 0;
15839     assign_in_cond(parser, node);
15840 
15841     switch (nd_type(node)) {
15842       case NODE_DSTR:
15843       case NODE_EVSTR:
15844       case NODE_STR:
15845         rb_warn0("string literal in condition");
15846         break;
15847 
15848       case NODE_DREGX:
15849       case NODE_DREGX_ONCE:
15850         warning_unless_e_option(parser, node, "regex literal in condition");
15851         return NEW_MATCH2(node, NEW_GVAR(rb_intern("$_")));
15852 
15853       case NODE_AND:
15854       case NODE_OR:
15855         node->nd_1st = cond0(parser, node->nd_1st);
15856         node->nd_2nd = cond0(parser, node->nd_2nd);
15857         break;
15858 
15859       case NODE_DOT2:
15860       case NODE_DOT3:
15861         node->nd_beg = range_op(parser, node->nd_beg);
15862         node->nd_end = range_op(parser, node->nd_end);
15863         if (nd_type(node) == NODE_DOT2) nd_set_type(node,NODE_FLIP2);
15864         else if (nd_type(node) == NODE_DOT3) nd_set_type(node, NODE_FLIP3);
15865         if (!e_option_supplied(parser)) {
15866             int b = literal_node(node->nd_beg);
15867             int e = literal_node(node->nd_end);
15868             if ((b == 1 && e == 1) || (b + e >= 2 && RTEST(ruby_verbose))) {
15869                 parser_warn(node, "range literal in condition");
15870             }
15871         }
15872         break;
15873 
15874       case NODE_DSYM:
15875         parser_warning(node, "literal in condition");
15876         break;
15877 
15878       case NODE_LIT:
15879         if (RB_TYPE_P(node->nd_lit, T_REGEXP)) {
15880             warn_unless_e_option(parser, node, "regex literal in condition");
15881             nd_set_type(node, NODE_MATCH);
15882         }
15883         else {
15884             parser_warning(node, "literal in condition");
15885         }
15886       default:
15887         break;
15888     }
15889     return node;
15890 }
15891 
15892 static NODE*
15893 cond_gen(struct parser_params *parser, NODE *node)
15894 {
15895     if (node == 0) return 0;
15896     return cond0(parser, node);
15897 }
15898 
15899 static NODE*
15900 logop_gen(struct parser_params *parser, enum node_type type, NODE *left, NODE *right)
15901 {
15902     value_expr(left);
15903     if (left && (enum node_type)nd_type(left) == type) {
15904         NODE *node = left, *second;
15905         while ((second = node->nd_2nd) != 0 && (enum node_type)nd_type(second) == type) {
15906             node = second;
15907         }
15908         node->nd_2nd = NEW_NODE(type, second, right, 0);
15909         return left;
15910     }
15911     return NEW_NODE(type, left, right, 0);
15912 }
15913 
15914 static void
15915 no_blockarg(struct parser_params *parser, NODE *node)
15916 {
15917     if (node && nd_type(node) == NODE_BLOCK_PASS) {
15918         compile_error(PARSER_ARG "block argument should not be given");
15919     }
15920 }
15921 
15922 static NODE *
15923 ret_args_gen(struct parser_params *parser, NODE *node)
15924 {
15925     if (node) {
15926         no_blockarg(parser, node);
15927         if (nd_type(node) == NODE_ARRAY) {
15928             if (node->nd_next == 0) {
15929                 node = node->nd_head;
15930             }
15931             else {
15932                 nd_set_type(node, NODE_VALUES);
15933             }
15934         }
15935     }
15936     return node;
15937 }
15938 
15939 static NODE *
15940 new_yield_gen(struct parser_params *parser, NODE *node)
15941 {
15942     if (node) no_blockarg(parser, node);
15943 
15944     return NEW_YIELD(node);
15945 }
15946 
15947 static NODE*
15948 negate_lit(NODE *node)
15949 {
15950     switch (TYPE(node->nd_lit)) {
15951       case T_FIXNUM:
15952         node->nd_lit = LONG2FIX(-FIX2LONG(node->nd_lit));
15953         break;
15954       case T_BIGNUM:
15955       case T_RATIONAL:
15956       case T_COMPLEX:
15957         node->nd_lit = rb_funcall(node->nd_lit,tUMINUS,0,0);
15958         break;
15959       case T_FLOAT:
15960 #if USE_FLONUM
15961         if (FLONUM_P(node->nd_lit)) {
15962             node->nd_lit = DBL2NUM(-RFLOAT_VALUE(node->nd_lit));
15963         }
15964         else {
15965             RFLOAT(node->nd_lit)->float_value = -RFLOAT_VALUE(node->nd_lit);
15966         }
15967 #else
15968         RFLOAT(node->nd_lit)->float_value = -RFLOAT_VALUE(node->nd_lit);
15969 #endif
15970         break;
15971       default:
15972         rb_bug("unknown literal type passed to negate_lit");
15973         break;
15974     }
15975     return node;
15976 }
15977 
15978 static NODE *
15979 arg_blk_pass(NODE *node1, NODE *node2)
15980 {
15981     if (node2) {
15982         node2->nd_head = node1;
15983         return node2;
15984     }
15985     return node1;
15986 }
15987 
15988 
15989 static NODE*
15990 new_args_gen(struct parser_params *parser, NODE *m, NODE *o, ID r, NODE *p, NODE *tail)
15991 {
15992     int saved_line = ruby_sourceline;
15993     struct rb_args_info *args = tail->nd_ainfo;
15994 
15995     args->pre_args_num   = m ? rb_long2int(m->nd_plen) : 0;
15996     args->pre_init       = m ? m->nd_next : 0;
15997 
15998     args->post_args_num  = p ? rb_long2int(p->nd_plen) : 0;
15999     args->post_init      = p ? p->nd_next : 0;
16000     args->first_post_arg = p ? p->nd_pid : 0;
16001 
16002     args->rest_arg       = r;
16003 
16004     args->opt_args       = o;
16005 
16006     ruby_sourceline = saved_line;
16007 
16008     return tail;
16009 }
16010 
16011 static NODE*
16012 new_args_tail_gen(struct parser_params *parser, NODE *k, ID kr, ID b)
16013 {
16014     int saved_line = ruby_sourceline;
16015     struct rb_args_info *args;
16016     NODE *kw_rest_arg = 0;
16017     NODE *node;
16018     int check = 0;
16019 
16020     args = ALLOC(struct rb_args_info);
16021     MEMZERO(args, struct rb_args_info, 1);
16022     node = NEW_NODE(NODE_ARGS, 0, 0, args);
16023 
16024     args->block_arg      = b;
16025     args->kw_args        = k;
16026     if (k && !kr) {
16027         check = 1;
16028         kr = internal_id();
16029     }
16030     if (kr) {
16031         arg_var(kr);
16032         kw_rest_arg  = NEW_DVAR(kr);
16033         kw_rest_arg->nd_cflag = check;
16034     }
16035     args->kw_rest_arg    = kw_rest_arg;
16036 
16037     ruby_sourceline = saved_line;
16038     return node;
16039 }
16040 
16041 static NODE*
16042 dsym_node_gen(struct parser_params *parser, NODE *node)
16043 {
16044     VALUE lit;
16045 
16046     if (!node) {
16047         return NEW_LIT(ID2SYM(idNULL));
16048     }
16049 
16050     switch (nd_type(node)) {
16051       case NODE_DSTR:
16052         nd_set_type(node, NODE_DSYM);
16053         break;
16054       case NODE_STR:
16055         lit = node->nd_lit;
16056         node->nd_lit = ID2SYM(rb_intern_str(lit));
16057         nd_set_type(node, NODE_LIT);
16058         break;
16059       default:
16060         node = NEW_NODE(NODE_DSYM, Qnil, 1, NEW_LIST(node));
16061         break;
16062     }
16063     return node;
16064 }
16065 #endif /* !RIPPER */
16066 
16067 #ifndef RIPPER
16068 static NODE *
16069 new_op_assign_gen(struct parser_params *parser, NODE *lhs, ID op, NODE *rhs)
16070 {
16071     NODE *asgn;
16072 
16073     if (lhs) {
16074         ID vid = lhs->nd_vid;
16075         if (op == tOROP) {
16076             lhs->nd_value = rhs;
16077             asgn = NEW_OP_ASGN_OR(gettable(vid), lhs);
16078             if (is_asgn_or_id(vid)) {
16079                 asgn->nd_aid = vid;
16080             }
16081         }
16082         else if (op == tANDOP) {
16083             lhs->nd_value = rhs;
16084             asgn = NEW_OP_ASGN_AND(gettable(vid), lhs);
16085         }
16086         else {
16087             asgn = lhs;
16088             asgn->nd_value = NEW_CALL(gettable(vid), op, NEW_LIST(rhs));
16089         }
16090     }
16091     else {
16092         asgn = NEW_BEGIN(0);
16093     }
16094     return asgn;
16095 }
16096 
16097 static NODE *
16098 new_attr_op_assign_gen(struct parser_params *parser, NODE *lhs, ID attr, ID op, NODE *rhs)
16099 {
16100     NODE *asgn;
16101 
16102     if (op == tOROP) {
16103         op = 0;
16104     }
16105     else if (op == tANDOP) {
16106         op = 1;
16107     }
16108     asgn = NEW_OP_ASGN2(lhs, attr, op, rhs);
16109     fixpos(asgn, lhs);
16110     return asgn;
16111 }
16112 
16113 static NODE *
16114 new_const_op_assign_gen(struct parser_params *parser, NODE *lhs, ID op, NODE *rhs)
16115 {
16116     NODE *asgn;
16117 
16118     if (op == tOROP) {
16119         op = 0;
16120     }
16121     else if (op == tANDOP) {
16122         op = 1;
16123     }
16124     if (lhs) {
16125         asgn = NEW_OP_CDECL(lhs, op, rhs);
16126     }
16127     else {
16128         asgn = NEW_BEGIN(0);
16129     }
16130     fixpos(asgn, lhs);
16131     return asgn;
16132 }
16133 #else
16134 static VALUE
16135 new_op_assign_gen(struct parser_params *parser, VALUE lhs, VALUE op, VALUE rhs)
16136 {
16137     return dispatch3(opassign, lhs, op, rhs);
16138 }
16139 
16140 static VALUE
16141 new_attr_op_assign_gen(struct parser_params *parser, VALUE lhs, VALUE type, VALUE attr, VALUE op, VALUE rhs)
16142 {
16143     VALUE recv = dispatch3(field, lhs, type, attr);
16144     return dispatch3(opassign, recv, op, rhs);
16145 }
16146 #endif
16147 
16148 static void
16149 warn_unused_var(struct parser_params *parser, struct local_vars *local)
16150 {
16151     int i, cnt;
16152     ID *v, *u;
16153 
16154     if (!local->used) return;
16155     v = local->vars->tbl;
16156     u = local->used->tbl;
16157     cnt = local->used->pos;
16158     if (cnt != local->vars->pos) {
16159         rb_bug("local->used->pos != local->vars->pos");
16160     }
16161     for (i = 0; i < cnt; ++i) {
16162         if (!v[i] || (u[i] & LVAR_USED)) continue;
16163         if (is_private_local_id(v[i])) continue;
16164         rb_warn4S(ruby_sourcefile, (int)u[i], "assigned but unused variable - %s", rb_id2name(v[i]));
16165     }
16166 }
16167 
16168 static void
16169 local_push_gen(struct parser_params *parser, int inherit_dvars)
16170 {
16171     struct local_vars *local;
16172 
16173     local = ALLOC(struct local_vars);
16174     local->prev = lvtbl;
16175     local->args = vtable_alloc(0);
16176     local->vars = vtable_alloc(inherit_dvars ? DVARS_INHERIT : DVARS_TOPSCOPE);
16177     local->used = !(inherit_dvars &&
16178                     (ifndef_ripper(compile_for_eval || e_option_supplied(parser))+0)) &&
16179         RTEST(ruby_verbose) ? vtable_alloc(0) : 0;
16180     local->cmdargs = cmdarg_stack;
16181     cmdarg_stack = 0;
16182     lvtbl = local;
16183 }
16184 
16185 static void
16186 local_pop_gen(struct parser_params *parser)
16187 {
16188     struct local_vars *local = lvtbl->prev;
16189     if (lvtbl->used) {
16190         warn_unused_var(parser, lvtbl);
16191         vtable_free(lvtbl->used);
16192     }
16193     vtable_free(lvtbl->args);
16194     vtable_free(lvtbl->vars);
16195     cmdarg_stack = lvtbl->cmdargs;
16196     xfree(lvtbl);
16197     lvtbl = local;
16198 }
16199 
16200 #ifndef RIPPER
16201 static ID*
16202 local_tbl_gen(struct parser_params *parser)
16203 {
16204     int cnt_args = vtable_size(lvtbl->args);
16205     int cnt_vars = vtable_size(lvtbl->vars);
16206     int cnt = cnt_args + cnt_vars;
16207     int i, j;
16208     ID *buf;
16209 
16210     if (cnt <= 0) return 0;
16211     buf = ALLOC_N(ID, cnt + 1);
16212     MEMCPY(buf+1, lvtbl->args->tbl, ID, cnt_args);
16213     /* remove IDs duplicated to warn shadowing */
16214     for (i = 0, j = cnt_args+1; i < cnt_vars; ++i) {
16215         ID id = lvtbl->vars->tbl[i];
16216         if (!vtable_included(lvtbl->args, id)) {
16217             buf[j++] = id;
16218         }
16219     }
16220     if (--j < cnt) REALLOC_N(buf, ID, (cnt = j) + 1);
16221     buf[0] = cnt;
16222     return buf;
16223 }
16224 #endif
16225 
16226 static int
16227 arg_var_gen(struct parser_params *parser, ID id)
16228 {
16229     vtable_add(lvtbl->args, id);
16230     return vtable_size(lvtbl->args) - 1;
16231 }
16232 
16233 static int
16234 local_var_gen(struct parser_params *parser, ID id)
16235 {
16236     vtable_add(lvtbl->vars, id);
16237     if (lvtbl->used) {
16238         vtable_add(lvtbl->used, (ID)ruby_sourceline);
16239     }
16240     return vtable_size(lvtbl->vars) - 1;
16241 }
16242 
16243 static int
16244 local_id_gen(struct parser_params *parser, ID id)
16245 {
16246     struct vtable *vars, *args, *used;
16247 
16248     vars = lvtbl->vars;
16249     args = lvtbl->args;
16250     used = lvtbl->used;
16251 
16252     while (vars && POINTER_P(vars->prev)) {
16253         vars = vars->prev;
16254         args = args->prev;
16255         if (used) used = used->prev;
16256     }
16257 
16258     if (vars && vars->prev == DVARS_INHERIT) {
16259         return rb_local_defined(id);
16260     }
16261     else if (vtable_included(args, id)) {
16262         return 1;
16263     }
16264     else {
16265         int i = vtable_included(vars, id);
16266         if (i && used) used->tbl[i-1] |= LVAR_USED;
16267         return i != 0;
16268     }
16269 }
16270 
16271 static const struct vtable *
16272 dyna_push_gen(struct parser_params *parser)
16273 {
16274     lvtbl->args = vtable_alloc(lvtbl->args);
16275     lvtbl->vars = vtable_alloc(lvtbl->vars);
16276     if (lvtbl->used) {
16277         lvtbl->used = vtable_alloc(lvtbl->used);
16278     }
16279     return lvtbl->args;
16280 }
16281 
16282 static void
16283 dyna_pop_1(struct parser_params *parser)
16284 {
16285     struct vtable *tmp;
16286 
16287     if ((tmp = lvtbl->used) != 0) {
16288         warn_unused_var(parser, lvtbl);
16289         lvtbl->used = lvtbl->used->prev;
16290         vtable_free(tmp);
16291     }
16292     tmp = lvtbl->args;
16293     lvtbl->args = lvtbl->args->prev;
16294     vtable_free(tmp);
16295     tmp = lvtbl->vars;
16296     lvtbl->vars = lvtbl->vars->prev;
16297     vtable_free(tmp);
16298 }
16299 
16300 static void
16301 dyna_pop_gen(struct parser_params *parser, const struct vtable *lvargs)
16302 {
16303     while (lvtbl->args != lvargs) {
16304         dyna_pop_1(parser);
16305         if (!lvtbl->args) {
16306             struct local_vars *local = lvtbl->prev;
16307             xfree(lvtbl);
16308             lvtbl = local;
16309         }
16310     }
16311     dyna_pop_1(parser);
16312 }
16313 
16314 static int
16315 dyna_in_block_gen(struct parser_params *parser)
16316 {
16317     return POINTER_P(lvtbl->vars) && lvtbl->vars->prev != DVARS_TOPSCOPE;
16318 }
16319 
16320 static int
16321 dvar_defined_gen(struct parser_params *parser, ID id, int get)
16322 {
16323     struct vtable *vars, *args, *used;
16324     int i;
16325 
16326     args = lvtbl->args;
16327     vars = lvtbl->vars;
16328     used = lvtbl->used;
16329 
16330     while (POINTER_P(vars)) {
16331         if (vtable_included(args, id)) {
16332             return 1;
16333         }
16334         if ((i = vtable_included(vars, id)) != 0) {
16335             if (used) used->tbl[i-1] |= LVAR_USED;
16336             return 1;
16337         }
16338         args = args->prev;
16339         vars = vars->prev;
16340         if (get) used = 0;
16341         if (used) used = used->prev;
16342     }
16343 
16344     if (vars == DVARS_INHERIT) {
16345         return rb_dvar_defined(id);
16346     }
16347 
16348     return 0;
16349 }
16350 
16351 static int
16352 dvar_curr_gen(struct parser_params *parser, ID id)
16353 {
16354     return (vtable_included(lvtbl->args, id) ||
16355             vtable_included(lvtbl->vars, id));
16356 }
16357 
16358 #ifndef RIPPER
16359 static void
16360 reg_fragment_setenc_gen(struct parser_params* parser, VALUE str, int options)
16361 {
16362     int c = RE_OPTION_ENCODING_IDX(options);
16363 
16364     if (c) {
16365         int opt, idx;
16366         rb_char_to_option_kcode(c, &opt, &idx);
16367         if (idx != ENCODING_GET(str) &&
16368             rb_enc_str_coderange(str) != ENC_CODERANGE_7BIT) {
16369             goto error;
16370         }
16371         ENCODING_SET(str, idx);
16372     }
16373     else if (RE_OPTION_ENCODING_NONE(options)) {
16374         if (!ENCODING_IS_ASCII8BIT(str) &&
16375             rb_enc_str_coderange(str) != ENC_CODERANGE_7BIT) {
16376             c = 'n';
16377             goto error;
16378         }
16379         rb_enc_associate(str, rb_ascii8bit_encoding());
16380     }
16381     else if (current_enc == rb_usascii_encoding()) {
16382         if (rb_enc_str_coderange(str) != ENC_CODERANGE_7BIT) {
16383             /* raise in re.c */
16384             rb_enc_associate(str, rb_usascii_encoding());
16385         }
16386         else {
16387             rb_enc_associate(str, rb_ascii8bit_encoding());
16388         }
16389     }
16390     return;
16391 
16392   error:
16393     compile_error(PARSER_ARG
16394         "regexp encoding option '%c' differs from source encoding '%s'",
16395         c, rb_enc_name(rb_enc_get(str)));
16396 }
16397 
16398 static int
16399 reg_fragment_check_gen(struct parser_params* parser, VALUE str, int options)
16400 {
16401     VALUE err;
16402     reg_fragment_setenc(str, options);
16403     err = rb_reg_check_preprocess(str);
16404     if (err != Qnil) {
16405         err = rb_obj_as_string(err);
16406         compile_error(PARSER_ARG "%"PRIsVALUE, err);
16407         return 0;
16408     }
16409     return 1;
16410 }
16411 
16412 typedef struct {
16413     struct parser_params* parser;
16414     rb_encoding *enc;
16415     NODE *succ_block;
16416     NODE *fail_block;
16417     int num;
16418 } reg_named_capture_assign_t;
16419 
16420 static int
16421 reg_named_capture_assign_iter(const OnigUChar *name, const OnigUChar *name_end,
16422           int back_num, int *back_refs, OnigRegex regex, void *arg0)
16423 {
16424     reg_named_capture_assign_t *arg = (reg_named_capture_assign_t*)arg0;
16425     struct parser_params* parser = arg->parser;
16426     rb_encoding *enc = arg->enc;
16427     long len = name_end - name;
16428     const char *s = (const char *)name;
16429     ID var;
16430 
16431     arg->num++;
16432 
16433     if (arg->succ_block == 0) {
16434         arg->succ_block = NEW_BEGIN(0);
16435         arg->fail_block = NEW_BEGIN(0);
16436     }
16437 
16438     if (!len || (*name != '_' && ISASCII(*name) && !rb_enc_islower(*name, enc)) ||
16439         (len < MAX_WORD_LENGTH && rb_reserved_word(s, (int)len)) ||
16440         !rb_enc_symname2_p(s, len, enc)) {
16441         return ST_CONTINUE;
16442     }
16443     var = rb_intern3(s, len, enc);
16444     if (dvar_defined(var) || local_id(var)) {
16445         rb_warningS("named capture conflicts a local variable - %s",
16446                     rb_id2name(var));
16447     }
16448     arg->succ_block = block_append(arg->succ_block,
16449         newline_node(node_assign(assignable(var,0),
16450             NEW_CALL(
16451               gettable(rb_intern("$~")),
16452               idAREF,
16453               NEW_LIST(NEW_LIT(ID2SYM(var))))
16454             )));
16455     arg->fail_block = block_append(arg->fail_block,
16456         newline_node(node_assign(assignable(var,0), NEW_LIT(Qnil))));
16457     return ST_CONTINUE;
16458 }
16459 
16460 static NODE *
16461 reg_named_capture_assign_gen(struct parser_params* parser, VALUE regexp, NODE *match)
16462 {
16463     reg_named_capture_assign_t arg;
16464 
16465     arg.parser = parser;
16466     arg.enc = rb_enc_get(regexp);
16467     arg.succ_block = 0;
16468     arg.fail_block = 0;
16469     arg.num = 0;
16470     onig_foreach_name(RREGEXP(regexp)->ptr, reg_named_capture_assign_iter, (void*)&arg);
16471 
16472     if (arg.num == 0)
16473         return match;
16474 
16475     return
16476         block_append(
16477             newline_node(match),
16478             NEW_IF(gettable(rb_intern("$~")),
16479                 block_append(
16480                     newline_node(arg.succ_block),
16481                     newline_node(
16482                         NEW_CALL(
16483                           gettable(rb_intern("$~")),
16484                           rb_intern("begin"),
16485                           NEW_LIST(NEW_LIT(INT2FIX(0)))))),
16486                 block_append(
16487                     newline_node(arg.fail_block),
16488                     newline_node(
16489                         NEW_LIT(Qnil)))));
16490 }
16491 
16492 static VALUE
16493 reg_compile_gen(struct parser_params* parser, VALUE str, int options)
16494 {
16495     VALUE re;
16496     VALUE err;
16497 
16498     reg_fragment_setenc(str, options);
16499     err = rb_errinfo();
16500     re = rb_reg_compile(str, options & RE_OPTION_MASK, ruby_sourcefile, ruby_sourceline);
16501     if (NIL_P(re)) {
16502         ID mesg = rb_intern("mesg");
16503         VALUE m = rb_attr_get(rb_errinfo(), mesg);
16504         rb_set_errinfo(err);
16505         if (!NIL_P(err)) {
16506             rb_str_append(rb_str_cat(rb_attr_get(err, mesg), "\n", 1), m);
16507         }
16508         else {
16509             compile_error(PARSER_ARG "%"PRIsVALUE, m);
16510         }
16511         return Qnil;
16512     }
16513     return re;
16514 }
16515 
16516 void
16517 rb_gc_mark_parser(void)
16518 {
16519 }
16520 
16521 NODE*
16522 rb_parser_append_print(VALUE vparser, NODE *node)
16523 {
16524     NODE *prelude = 0;
16525     NODE *scope = node;
16526     struct parser_params *parser;
16527 
16528     if (!node) return node;
16529 
16530     TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
16531 
16532     node = node->nd_body;
16533 
16534     if (nd_type(node) == NODE_PRELUDE) {
16535         prelude = node;
16536         node = node->nd_body;
16537     }
16538 
16539     node = block_append(node,
16540                         NEW_FCALL(rb_intern("print"),
16541                                   NEW_ARRAY(NEW_GVAR(rb_intern("$_")))));
16542     if (prelude) {
16543         prelude->nd_body = node;
16544         scope->nd_body = prelude;
16545     }
16546     else {
16547         scope->nd_body = node;
16548     }
16549 
16550     return scope;
16551 }
16552 
16553 NODE *
16554 rb_parser_while_loop(VALUE vparser, NODE *node, int chop, int split)
16555 {
16556     NODE *prelude = 0;
16557     NODE *scope = node;
16558     struct parser_params *parser;
16559 
16560     if (!node) return node;
16561 
16562     TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
16563 
16564     node = node->nd_body;
16565 
16566     if (nd_type(node) == NODE_PRELUDE) {
16567         prelude = node;
16568         node = node->nd_body;
16569     }
16570     if (split) {
16571         node = block_append(NEW_GASGN(rb_intern("$F"),
16572                                       NEW_CALL(NEW_GVAR(rb_intern("$_")),
16573                                                rb_intern("split"), 0)),
16574                             node);
16575     }
16576     if (chop) {
16577         node = block_append(NEW_CALL(NEW_GVAR(rb_intern("$_")),
16578                                      rb_intern("chop!"), 0), node);
16579     }
16580 
16581     node = NEW_OPT_N(node);
16582 
16583     if (prelude) {
16584         prelude->nd_body = node;
16585         scope->nd_body = prelude;
16586     }
16587     else {
16588         scope->nd_body = node;
16589     }
16590 
16591     return scope;
16592 }
16593 
16594 static const struct {
16595     ID token;
16596     const char *name;
16597 } op_tbl[] = {
16598     {tDOT2,     ".."},
16599     {tDOT3,     "..."},
16600     {tPOW,      "**"},
16601     {tDSTAR,    "**"},
16602     {tUPLUS,    "+@"},
16603     {tUMINUS,   "-@"},
16604     {tCMP,      "<=>"},
16605     {tGEQ,      ">="},
16606     {tLEQ,      "<="},
16607     {tEQ,       "=="},
16608     {tEQQ,      "==="},
16609     {tNEQ,      "!="},
16610     {tMATCH,    "=~"},
16611     {tNMATCH,   "!~"},
16612     {tAREF,     "[]"},
16613     {tASET,     "[]="},
16614     {tLSHFT,    "<<"},
16615     {tRSHFT,    ">>"},
16616     {tCOLON2,   "::"},
16617 };
16618 
16619 #define op_tbl_count numberof(op_tbl)
16620 
16621 #ifndef ENABLE_SELECTOR_NAMESPACE
16622 #define ENABLE_SELECTOR_NAMESPACE 0
16623 #endif
16624 
16625 static struct symbols {
16626     ID last_id;
16627     st_table *sym_id;
16628     st_table *id_str;
16629 #if ENABLE_SELECTOR_NAMESPACE
16630     st_table *ivar2_id;
16631     st_table *id_ivar2;
16632 #endif
16633     VALUE op_sym[tLAST_OP_ID];
16634     int minor_marked;
16635 } global_symbols = {tLAST_TOKEN};
16636 
16637 static const struct st_hash_type symhash = {
16638     rb_str_hash_cmp,
16639     rb_str_hash,
16640 };
16641 
16642 #if ENABLE_SELECTOR_NAMESPACE
16643 struct ivar2_key {
16644     ID id;
16645     VALUE klass;
16646 };
16647 
16648 static int
16649 ivar2_cmp(struct ivar2_key *key1, struct ivar2_key *key2)
16650 {
16651     if (key1->id == key2->id && key1->klass == key2->klass) {
16652         return 0;
16653     }
16654     return 1;
16655 }
16656 
16657 static int
16658 ivar2_hash(struct ivar2_key *key)
16659 {
16660     return (key->id << 8) ^ (key->klass >> 2);
16661 }
16662 
16663 static const struct st_hash_type ivar2_hash_type = {
16664     ivar2_cmp,
16665     ivar2_hash,
16666 };
16667 #endif
16668 
16669 void
16670 Init_sym(void)
16671 {
16672     global_symbols.sym_id = st_init_table_with_size(&symhash, 1000);
16673     global_symbols.id_str = st_init_numtable_with_size(1000);
16674 #if ENABLE_SELECTOR_NAMESPACE
16675     global_symbols.ivar2_id = st_init_table_with_size(&ivar2_hash_type, 1000);
16676     global_symbols.id_ivar2 = st_init_numtable_with_size(1000);
16677 #endif
16678 
16679     (void)nodetype;
16680     (void)nodeline;
16681 #if PARSER_DEBUG
16682     (void)lex_state_name(-1);
16683 #endif
16684 
16685     Init_id();
16686 }
16687 
16688 void
16689 rb_gc_mark_symbols(int full_mark)
16690 {
16691     if (full_mark || global_symbols.minor_marked == 0) {
16692         rb_mark_tbl(global_symbols.id_str);
16693         rb_gc_mark_locations(global_symbols.op_sym,
16694                              global_symbols.op_sym + numberof(global_symbols.op_sym));
16695 
16696         if (!full_mark) global_symbols.minor_marked = 1;
16697     }
16698 }
16699 #endif /* !RIPPER */
16700 
16701 static ID
16702 internal_id_gen(struct parser_params *parser)
16703 {
16704     ID id = (ID)vtable_size(lvtbl->args) + (ID)vtable_size(lvtbl->vars);
16705     id += ((tLAST_TOKEN - ID_INTERNAL) >> ID_SCOPE_SHIFT) + 1;
16706     return ID_INTERNAL | (id << ID_SCOPE_SHIFT);
16707 }
16708 
16709 #ifndef RIPPER
16710 static int
16711 is_special_global_name(const char *m, const char *e, rb_encoding *enc)
16712 {
16713     int mb = 0;
16714 
16715     if (m >= e) return 0;
16716     if (is_global_name_punct(*m)) {
16717         ++m;
16718     }
16719     else if (*m == '-') {
16720         if (++m >= e) return 0;
16721         if (is_identchar(m, e, enc)) {
16722             if (!ISASCII(*m)) mb = 1;
16723             m += rb_enc_mbclen(m, e, enc);
16724         }
16725     }
16726     else {
16727         if (!rb_enc_isdigit(*m, enc)) return 0;
16728         do {
16729             if (!ISASCII(*m)) mb = 1;
16730             ++m;
16731         } while (m < e && rb_enc_isdigit(*m, enc));
16732     }
16733     return m == e ? mb + 1 : 0;
16734 }
16735 
16736 int
16737 rb_symname_p(const char *name)
16738 {
16739     return rb_enc_symname_p(name, rb_ascii8bit_encoding());
16740 }
16741 
16742 int
16743 rb_enc_symname_p(const char *name, rb_encoding *enc)
16744 {
16745     return rb_enc_symname2_p(name, strlen(name), enc);
16746 }
16747 
16748 #define IDSET_ATTRSET_FOR_SYNTAX ((1U<<ID_LOCAL)|(1U<<ID_CONST))
16749 #define IDSET_ATTRSET_FOR_INTERN (~(~0U<<ID_SCOPE_MASK) & ~(1U<<ID_ATTRSET))
16750 
16751 static int
16752 rb_enc_symname_type(const char *name, long len, rb_encoding *enc, unsigned int allowed_attrset)
16753 {
16754     const char *m = name;
16755     const char *e = m + len;
16756     int type = ID_JUNK;
16757 
16758     if (!m || len <= 0) return -1;
16759     switch (*m) {
16760       case '\0':
16761         return -1;
16762 
16763       case '$':
16764         type = ID_GLOBAL;
16765         if (is_special_global_name(++m, e, enc)) return type;
16766         goto id;
16767 
16768       case '@':
16769         type = ID_INSTANCE;
16770         if (*++m == '@') {
16771             ++m;
16772             type = ID_CLASS;
16773         }
16774         goto id;
16775 
16776       case '<':
16777         switch (*++m) {
16778           case '<': ++m; break;
16779           case '=': if (*++m == '>') ++m; break;
16780           default: break;
16781         }
16782         break;
16783 
16784       case '>':
16785         switch (*++m) {
16786           case '>': case '=': ++m; break;
16787         }
16788         break;
16789 
16790       case '=':
16791         switch (*++m) {
16792           case '~': ++m; break;
16793           case '=': if (*++m == '=') ++m; break;
16794           default: return -1;
16795         }
16796         break;
16797 
16798       case '*':
16799         if (*++m == '*') ++m;
16800         break;
16801 
16802       case '+': case '-':
16803         if (*++m == '@') ++m;
16804         break;
16805 
16806       case '|': case '^': case '&': case '/': case '%': case '~': case '`':
16807         ++m;
16808         break;
16809 
16810       case '[':
16811         if (*++m != ']') return -1;
16812         if (*++m == '=') ++m;
16813         break;
16814 
16815       case '!':
16816         if (len == 1) return ID_JUNK;
16817         switch (*++m) {
16818           case '=': case '~': ++m; break;
16819           default: return -1;
16820         }
16821         break;
16822 
16823       default:
16824         type = rb_enc_isupper(*m, enc) ? ID_CONST : ID_LOCAL;
16825       id:
16826         if (m >= e || (*m != '_' && !rb_enc_isalpha(*m, enc) && ISASCII(*m)))
16827             return -1;
16828         while (m < e && is_identchar(m, e, enc)) m += rb_enc_mbclen(m, e, enc);
16829         if (m >= e) break;
16830         switch (*m) {
16831           case '!': case '?':
16832             if (type == ID_GLOBAL || type == ID_CLASS || type == ID_INSTANCE) return -1;
16833             type = ID_JUNK;
16834             ++m;
16835             break;
16836           case '=':
16837             if (!(allowed_attrset & (1U << type))) return -1;
16838             type = ID_ATTRSET;
16839             ++m;
16840             break;
16841         }
16842         break;
16843     }
16844     return m == e ? type : -1;
16845 }
16846 
16847 int
16848 rb_enc_symname2_p(const char *name, long len, rb_encoding *enc)
16849 {
16850     return rb_enc_symname_type(name, len, enc, IDSET_ATTRSET_FOR_SYNTAX) != -1;
16851 }
16852 
16853 static int
16854 rb_str_symname_type(VALUE name, unsigned int allowed_attrset)
16855 {
16856     const char *ptr = StringValuePtr(name);
16857     long len = RSTRING_LEN(name);
16858     int type = rb_enc_symname_type(ptr, len, rb_enc_get(name), allowed_attrset);
16859     RB_GC_GUARD(name);
16860     return type;
16861 }
16862 
16863 static ID
16864 register_symid(ID id, const char *name, long len, rb_encoding *enc)
16865 {
16866     VALUE str = rb_enc_str_new(name, len, enc);
16867     return register_symid_str(id, str);
16868 }
16869 
16870 static ID
16871 register_symid_str(ID id, VALUE str)
16872 {
16873     OBJ_FREEZE(str);
16874     str = rb_fstring(str);
16875 
16876     if (RUBY_DTRACE_SYMBOL_CREATE_ENABLED()) {
16877         RUBY_DTRACE_SYMBOL_CREATE(RSTRING_PTR(str), rb_sourcefile(), rb_sourceline());
16878     }
16879 
16880     st_add_direct(global_symbols.sym_id, (st_data_t)str, id);
16881     st_add_direct(global_symbols.id_str, id, (st_data_t)str);
16882     global_symbols.minor_marked = 0;
16883     return id;
16884 }
16885 
16886 static int
16887 sym_check_asciionly(VALUE str)
16888 {
16889     if (!rb_enc_asciicompat(rb_enc_get(str))) return FALSE;
16890     switch (rb_enc_str_coderange(str)) {
16891       case ENC_CODERANGE_BROKEN:
16892         rb_raise(rb_eEncodingError, "invalid encoding symbol");
16893       case ENC_CODERANGE_7BIT:
16894         return TRUE;
16895     }
16896     return FALSE;
16897 }
16898 
16899 /*
16900  * _str_ itself will be registered at the global symbol table.  _str_
16901  * can be modified before the registration, since the encoding will be
16902  * set to ASCII-8BIT if it is a special global name.
16903  */
16904 static ID intern_str(VALUE str);
16905 
16906 static VALUE
16907 setup_fake_str(struct RString *fake_str, const char *name, long len)
16908 {
16909     fake_str->basic.flags = T_STRING|RSTRING_NOEMBED;
16910     RBASIC_SET_CLASS_RAW((VALUE)fake_str, rb_cString);
16911     fake_str->as.heap.len = len;
16912     fake_str->as.heap.ptr = (char *)name;
16913     fake_str->as.heap.aux.capa = len;
16914     return (VALUE)fake_str;
16915 }
16916 
16917 ID
16918 rb_intern3(const char *name, long len, rb_encoding *enc)
16919 {
16920     st_data_t data;
16921     struct RString fake_str;
16922     VALUE str = setup_fake_str(&fake_str, name, len);
16923     rb_enc_associate(str, enc);
16924     OBJ_FREEZE(str);
16925 
16926     if (st_lookup(global_symbols.sym_id, str, &data))
16927         return (ID)data;
16928 
16929     str = rb_enc_str_new(name, len, enc); /* make true string */
16930     return intern_str(str);
16931 }
16932 
16933 static ID
16934 intern_str(VALUE str)
16935 {
16936     const char *name, *m, *e;
16937     long len, last;
16938     rb_encoding *enc, *symenc;
16939     unsigned char c;
16940     ID id;
16941     int mb;
16942 
16943     RSTRING_GETMEM(str, name, len);
16944     m = name;
16945     e = m + len;
16946     enc = rb_enc_get(str);
16947     symenc = enc;
16948 
16949     if (!len || (rb_cString && !rb_enc_asciicompat(enc))) {
16950       junk:
16951         id = ID_JUNK;
16952         goto new_id;
16953     }
16954     last = len-1;
16955     id = 0;
16956     switch (*m) {
16957       case '$':
16958         if (len < 2) goto junk;
16959         id |= ID_GLOBAL;
16960         if ((mb = is_special_global_name(++m, e, enc)) != 0) {
16961             if (!--mb) symenc = rb_usascii_encoding();
16962             goto new_id;
16963         }
16964         break;
16965       case '@':
16966         if (m[1] == '@') {
16967             if (len < 3) goto junk;
16968             m++;
16969             id |= ID_CLASS;
16970         }
16971         else {
16972             if (len < 2) goto junk;
16973             id |= ID_INSTANCE;
16974         }
16975         m++;
16976         break;
16977       default:
16978         c = m[0];
16979         if (c != '_' && rb_enc_isascii(c, enc) && rb_enc_ispunct(c, enc)) {
16980             /* operators */
16981             int i;
16982 
16983             if (len == 1) {
16984                 id = c;
16985                 goto id_register;
16986             }
16987             for (i = 0; i < op_tbl_count; i++) {
16988                 if (*op_tbl[i].name == *m &&
16989                     strcmp(op_tbl[i].name, m) == 0) {
16990                     id = op_tbl[i].token;
16991                     goto id_register;
16992                 }
16993             }
16994         }
16995         break;
16996     }
16997     if (name[last] == '=') {
16998         /* attribute assignment */
16999         if (last > 1 && name[last-1] == '=')
17000             goto junk;
17001         id = rb_intern3(name, last, enc);
17002         if (id > tLAST_OP_ID && !is_attrset_id(id)) {
17003             enc = rb_enc_get(rb_id2str(id));
17004             id = rb_id_attrset(id);
17005             goto id_register;
17006         }
17007         id = ID_ATTRSET;
17008     }
17009     else if (id == 0) {
17010         if (rb_enc_isupper(m[0], enc)) {
17011             id = ID_CONST;
17012         }
17013         else {
17014             id = ID_LOCAL;
17015         }
17016     }
17017     if (!rb_enc_isdigit(*m, enc)) {
17018         while (m <= name + last && is_identchar(m, e, enc)) {
17019             if (ISASCII(*m)) {
17020                 m++;
17021             }
17022             else {
17023                 m += rb_enc_mbclen(m, e, enc);
17024             }
17025         }
17026     }
17027     if (id != ID_ATTRSET && m - name < len) id = ID_JUNK;
17028     if (sym_check_asciionly(str)) symenc = rb_usascii_encoding();
17029   new_id:
17030     if (symenc != enc) rb_enc_associate(str, symenc);
17031     if (global_symbols.last_id >= ~(ID)0 >> (ID_SCOPE_SHIFT+RUBY_SPECIAL_SHIFT)) {
17032         if (len > 20) {
17033             rb_raise(rb_eRuntimeError, "symbol table overflow (symbol %.20s...)",
17034                      name);
17035         }
17036         else {
17037             rb_raise(rb_eRuntimeError, "symbol table overflow (symbol %.*s)",
17038                      (int)len, name);
17039         }
17040     }
17041     id |= ++global_symbols.last_id << ID_SCOPE_SHIFT;
17042   id_register:
17043     return register_symid_str(id, str);
17044 }
17045 
17046 ID
17047 rb_intern2(const char *name, long len)
17048 {
17049     return rb_intern3(name, len, rb_usascii_encoding());
17050 }
17051 
17052 #undef rb_intern
17053 ID
17054 rb_intern(const char *name)
17055 {
17056     return rb_intern2(name, strlen(name));
17057 }
17058 
17059 ID
17060 rb_intern_str(VALUE str)
17061 {
17062     st_data_t id;
17063 
17064     if (st_lookup(global_symbols.sym_id, str, &id))
17065         return (ID)id;
17066     return intern_str(rb_str_dup(str));
17067 }
17068 
17069 VALUE
17070 rb_id2str(ID id)
17071 {
17072     st_data_t data;
17073 
17074     if (id < tLAST_TOKEN) {
17075         int i = 0;
17076 
17077         if (id < INT_MAX && rb_ispunct((int)id)) {
17078             VALUE str = global_symbols.op_sym[i = (int)id];
17079             if (!str) {
17080                 char name[2];
17081                 name[0] = (char)id;
17082                 name[1] = 0;
17083                 str = rb_usascii_str_new(name, 1);
17084                 OBJ_FREEZE(str);
17085                 str = rb_fstring(str);
17086                 global_symbols.op_sym[i] = str;
17087                 global_symbols.minor_marked = 0;
17088             }
17089             return str;
17090         }
17091         for (i = 0; i < op_tbl_count; i++) {
17092             if (op_tbl[i].token == id) {
17093                 VALUE str = global_symbols.op_sym[i];
17094                 if (!str) {
17095                     str = rb_usascii_str_new2(op_tbl[i].name);
17096                     OBJ_FREEZE(str);
17097                     str = rb_fstring(str);
17098                     global_symbols.op_sym[i] = str;
17099                     global_symbols.minor_marked = 0;
17100                 }
17101                 return str;
17102             }
17103         }
17104     }
17105 
17106     if (st_lookup(global_symbols.id_str, id, &data)) {
17107         VALUE str = (VALUE)data;
17108         if (RBASIC(str)->klass == 0)
17109             RBASIC_SET_CLASS_RAW(str, rb_cString);
17110         return str;
17111     }
17112 
17113     if (is_attrset_id(id)) {
17114         ID id_stem = (id & ~ID_SCOPE_MASK);
17115         VALUE str;
17116 
17117         do {
17118             if (!!(str = rb_id2str(id_stem | ID_LOCAL))) break;
17119             if (!!(str = rb_id2str(id_stem | ID_CONST))) break;
17120             if (!!(str = rb_id2str(id_stem | ID_INSTANCE))) break;
17121             if (!!(str = rb_id2str(id_stem | ID_GLOBAL))) break;
17122             if (!!(str = rb_id2str(id_stem | ID_CLASS))) break;
17123             if (!!(str = rb_id2str(id_stem | ID_JUNK))) break;
17124             return 0;
17125         } while (0);
17126         str = rb_str_dup(str);
17127         rb_str_cat(str, "=", 1);
17128         register_symid_str(id, str);
17129         if (st_lookup(global_symbols.id_str, id, &data)) {
17130             VALUE str = (VALUE)data;
17131             if (RBASIC(str)->klass == 0)
17132                 RBASIC_SET_CLASS_RAW(str, rb_cString);
17133             return str;
17134         }
17135     }
17136     return 0;
17137 }
17138 
17139 const char *
17140 rb_id2name(ID id)
17141 {
17142     VALUE str = rb_id2str(id);
17143 
17144     if (!str) return 0;
17145     return RSTRING_PTR(str);
17146 }
17147 
17148 static int
17149 symbols_i(VALUE sym, ID value, VALUE ary)
17150 {
17151     rb_ary_push(ary, ID2SYM(value));
17152     return ST_CONTINUE;
17153 }
17154 
17155 /*
17156  *  call-seq:
17157  *     Symbol.all_symbols    => array
17158  *
17159  *  Returns an array of all the symbols currently in Ruby's symbol
17160  *  table.
17161  *
17162  *     Symbol.all_symbols.size    #=> 903
17163  *     Symbol.all_symbols[1,20]   #=> [:floor, :ARGV, :Binding, :symlink,
17164  *                                     :chown, :EOFError, :$;, :String,
17165  *                                     :LOCK_SH, :"setuid?", :$<,
17166  *                                     :default_proc, :compact, :extend,
17167  *                                     :Tms, :getwd, :$=, :ThreadGroup,
17168  *                                     :wait2, :$>]
17169  */
17170 
17171 VALUE
17172 rb_sym_all_symbols(void)
17173 {
17174     VALUE ary = rb_ary_new2(global_symbols.sym_id->num_entries);
17175 
17176     st_foreach(global_symbols.sym_id, symbols_i, ary);
17177     return ary;
17178 }
17179 
17180 int
17181 rb_is_const_id(ID id)
17182 {
17183     return is_const_id(id);
17184 }
17185 
17186 int
17187 rb_is_class_id(ID id)
17188 {
17189     return is_class_id(id);
17190 }
17191 
17192 int
17193 rb_is_global_id(ID id)
17194 {
17195     return is_global_id(id);
17196 }
17197 
17198 int
17199 rb_is_instance_id(ID id)
17200 {
17201     return is_instance_id(id);
17202 }
17203 
17204 int
17205 rb_is_attrset_id(ID id)
17206 {
17207     return is_attrset_id(id);
17208 }
17209 
17210 int
17211 rb_is_local_id(ID id)
17212 {
17213     return is_local_id(id);
17214 }
17215 
17216 int
17217 rb_is_junk_id(ID id)
17218 {
17219     return is_junk_id(id);
17220 }
17221 
17233 ID
17234 rb_check_id(volatile VALUE *namep)
17235 {
17236     st_data_t id;
17237     VALUE tmp;
17238     VALUE name = *namep;
17239 
17240     if (SYMBOL_P(name)) {
17241         return SYM2ID(name);
17242     }
17243     else if (!RB_TYPE_P(name, T_STRING)) {
17244         tmp = rb_check_string_type(name);
17245         if (NIL_P(tmp)) {
17246             tmp = rb_inspect(name);
17247             rb_raise(rb_eTypeError, "%s is not a symbol",
17248                      RSTRING_PTR(tmp));
17249         }
17250         name = tmp;
17251         *namep = name;
17252     }
17253 
17254     sym_check_asciionly(name);
17255 
17256     if (st_lookup(global_symbols.sym_id, (st_data_t)name, &id))
17257         return (ID)id;
17258 
17259     if (rb_is_attrset_name(name)) {
17260         struct RString fake_str;
17261         /* make local name by chopping '=' */
17262         const VALUE localname = setup_fake_str(&fake_str, RSTRING_PTR(name), RSTRING_LEN(name) - 1);
17263         rb_enc_copy(localname, name);
17264         OBJ_FREEZE(localname);
17265 
17266         if (st_lookup(global_symbols.sym_id, (st_data_t)localname, &id)) {
17267             return rb_id_attrset((ID)id);
17268         }
17269         RB_GC_GUARD(name);
17270     }
17271 
17272     return (ID)0;
17273 }
17274 
17275 ID
17276 rb_check_id_cstr(const char *ptr, long len, rb_encoding *enc)
17277 {
17278     st_data_t id;
17279     struct RString fake_str;
17280     const VALUE name = setup_fake_str(&fake_str, ptr, len);
17281     rb_enc_associate(name, enc);
17282 
17283     sym_check_asciionly(name);
17284 
17285     if (st_lookup(global_symbols.sym_id, (st_data_t)name, &id))
17286         return (ID)id;
17287 
17288     if (rb_is_attrset_name(name)) {
17289         fake_str.as.heap.len = len - 1;
17290         if (st_lookup(global_symbols.sym_id, (st_data_t)name, &id)) {
17291             return rb_id_attrset((ID)id);
17292         }
17293     }
17294 
17295     return (ID)0;
17296 }
17297 
17298 int
17299 rb_is_const_name(VALUE name)
17300 {
17301     return rb_str_symname_type(name, 0) == ID_CONST;
17302 }
17303 
17304 int
17305 rb_is_class_name(VALUE name)
17306 {
17307     return rb_str_symname_type(name, 0) == ID_CLASS;
17308 }
17309 
17310 int
17311 rb_is_global_name(VALUE name)
17312 {
17313     return rb_str_symname_type(name, 0) == ID_GLOBAL;
17314 }
17315 
17316 int
17317 rb_is_instance_name(VALUE name)
17318 {
17319     return rb_str_symname_type(name, 0) == ID_INSTANCE;
17320 }
17321 
17322 int
17323 rb_is_attrset_name(VALUE name)
17324 {
17325     return rb_str_symname_type(name, IDSET_ATTRSET_FOR_INTERN) == ID_ATTRSET;
17326 }
17327 
17328 int
17329 rb_is_local_name(VALUE name)
17330 {
17331     return rb_str_symname_type(name, 0) == ID_LOCAL;
17332 }
17333 
17334 int
17335 rb_is_method_name(VALUE name)
17336 {
17337     switch (rb_str_symname_type(name, 0)) {
17338       case ID_LOCAL: case ID_ATTRSET: case ID_JUNK:
17339         return TRUE;
17340     }
17341     return FALSE;
17342 }
17343 
17344 int
17345 rb_is_junk_name(VALUE name)
17346 {
17347     return rb_str_symname_type(name, IDSET_ATTRSET_FOR_SYNTAX) == -1;
17348 }
17349 
17350 #endif /* !RIPPER */
17351 
17352 static void
17353 parser_initialize(struct parser_params *parser)
17354 {
17355     parser->eofp = Qfalse;
17356 
17357     parser->parser_lex_strterm = 0;
17358     parser->parser_cond_stack = 0;
17359     parser->parser_cmdarg_stack = 0;
17360     parser->parser_class_nest = 0;
17361     parser->parser_paren_nest = 0;
17362     parser->parser_lpar_beg = 0;
17363     parser->parser_brace_nest = 0;
17364     parser->parser_in_single = 0;
17365     parser->parser_in_def = 0;
17366     parser->parser_in_defined = 0;
17367     parser->parser_in_kwarg = 0;
17368     parser->parser_compile_for_eval = 0;
17369     parser->parser_cur_mid = 0;
17370     parser->parser_tokenbuf = NULL;
17371     parser->parser_tokidx = 0;
17372     parser->parser_toksiz = 0;
17373     parser->parser_heredoc_end = 0;
17374     parser->parser_command_start = TRUE;
17375     parser->parser_deferred_nodes = 0;
17376     parser->parser_lex_pbeg = 0;
17377     parser->parser_lex_p = 0;
17378     parser->parser_lex_pend = 0;
17379     parser->parser_lvtbl = 0;
17380     parser->parser_ruby__end__seen = 0;
17381     parser->parser_ruby_sourcefile = 0;
17382     parser->parser_ruby_sourcefile_string = Qnil;
17383 #ifndef RIPPER
17384     parser->is_ripper = 0;
17385     parser->parser_eval_tree_begin = 0;
17386     parser->parser_eval_tree = 0;
17387 #else
17388     parser->is_ripper = 1;
17389     parser->delayed = Qnil;
17390 
17391     parser->result = Qnil;
17392     parser->parsing_thread = Qnil;
17393     parser->toplevel_p = TRUE;
17394 #endif
17395 #ifdef YYMALLOC
17396     parser->heap = NULL;
17397 #endif
17398     parser->enc = rb_utf8_encoding();
17399 }
17400 
17401 #ifdef RIPPER
17402 #define parser_mark ripper_parser_mark
17403 #define parser_free ripper_parser_free
17404 #endif
17405 
17406 static void
17407 parser_mark(void *ptr)
17408 {
17409     struct parser_params *p = (struct parser_params*)ptr;
17410 
17411     rb_gc_mark((VALUE)p->parser_lex_strterm);
17412     rb_gc_mark((VALUE)p->parser_deferred_nodes);
17413     rb_gc_mark(p->parser_lex_input);
17414     rb_gc_mark(p->parser_lex_lastline);
17415     rb_gc_mark(p->parser_lex_nextline);
17416     rb_gc_mark(p->parser_ruby_sourcefile_string);
17417 #ifndef RIPPER
17418     rb_gc_mark((VALUE)p->parser_eval_tree_begin) ;
17419     rb_gc_mark((VALUE)p->parser_eval_tree) ;
17420     rb_gc_mark(p->debug_lines);
17421 #else
17422     rb_gc_mark(p->delayed);
17423     rb_gc_mark(p->value);
17424     rb_gc_mark(p->result);
17425     rb_gc_mark(p->parsing_thread);
17426 #endif
17427 #ifdef YYMALLOC
17428     rb_gc_mark((VALUE)p->heap);
17429 #endif
17430 }
17431 
17432 static void
17433 parser_free(void *ptr)
17434 {
17435     struct parser_params *p = (struct parser_params*)ptr;
17436     struct local_vars *local, *prev;
17437 
17438     if (p->parser_tokenbuf) {
17439         xfree(p->parser_tokenbuf);
17440     }
17441     for (local = p->parser_lvtbl; local; local = prev) {
17442         if (local->vars) xfree(local->vars);
17443         prev = local->prev;
17444         xfree(local);
17445     }
17446     xfree(p);
17447 }
17448 
17449 static size_t
17450 parser_memsize(const void *ptr)
17451 {
17452     struct parser_params *p = (struct parser_params*)ptr;
17453     struct local_vars *local;
17454     size_t size = sizeof(*p);
17455 
17456     if (!ptr) return 0;
17457     size += p->parser_toksiz;
17458     for (local = p->parser_lvtbl; local; local = local->prev) {
17459         size += sizeof(*local);
17460         if (local->vars) size += local->vars->capa * sizeof(ID);
17461     }
17462     return size;
17463 }
17464 
17465 static
17466 #ifndef RIPPER
17467 const
17468 #endif
17469 rb_data_type_t parser_data_type = {
17470     "parser",
17471     {
17472         parser_mark,
17473         parser_free,
17474         parser_memsize,
17475     },
17476     NULL, NULL, RUBY_TYPED_FREE_IMMEDIATELY
17477 };
17478 
17479 #ifndef RIPPER
17480 #undef rb_reserved_word
17481 
17482 const struct kwtable *
17483 rb_reserved_word(const char *str, unsigned int len)
17484 {
17485     return reserved_word(str, len);
17486 }
17487 
17488 static struct parser_params *
17489 parser_new(void)
17490 {
17491     struct parser_params *p;
17492 
17493     p = ALLOC_N(struct parser_params, 1);
17494     MEMZERO(p, struct parser_params, 1);
17495     parser_initialize(p);
17496     return p;
17497 }
17498 
17499 VALUE
17500 rb_parser_new(void)
17501 {
17502     struct parser_params *p = parser_new();
17503 
17504     return TypedData_Wrap_Struct(0, &parser_data_type, p);
17505 }
17506 
17507 /*
17508  *  call-seq:
17509  *    ripper#end_seen?   -> Boolean
17510  *
17511  *  Return true if parsed source ended by +\_\_END\_\_+.
17512  */
17513 VALUE
17514 rb_parser_end_seen_p(VALUE vparser)
17515 {
17516     struct parser_params *parser;
17517 
17518     TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
17519     return ruby__end__seen ? Qtrue : Qfalse;
17520 }
17521 
17522 /*
17523  *  call-seq:
17524  *    ripper#encoding   -> encoding
17525  *
17526  *  Return encoding of the source.
17527  */
17528 VALUE
17529 rb_parser_encoding(VALUE vparser)
17530 {
17531     struct parser_params *parser;
17532 
17533     TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
17534     return rb_enc_from_encoding(current_enc);
17535 }
17536 
17537 /*
17538  *  call-seq:
17539  *    ripper.yydebug   -> true or false
17540  *
17541  *  Get yydebug.
17542  */
17543 VALUE
17544 rb_parser_get_yydebug(VALUE self)
17545 {
17546     struct parser_params *parser;
17547 
17548     TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
17549     return yydebug ? Qtrue : Qfalse;
17550 }
17551 
17552 /*
17553  *  call-seq:
17554  *    ripper.yydebug = flag
17555  *
17556  *  Set yydebug.
17557  */
17558 VALUE
17559 rb_parser_set_yydebug(VALUE self, VALUE flag)
17560 {
17561     struct parser_params *parser;
17562 
17563     TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
17564     yydebug = RTEST(flag);
17565     return flag;
17566 }
17567 
17568 #ifdef YYMALLOC
17569 #define HEAPCNT(n, size) ((n) * (size) / sizeof(YYSTYPE))
17570 #define NEWHEAP() rb_node_newnode(NODE_ALLOCA, 0, (VALUE)parser->heap, 0)
17571 #define ADD2HEAP(n, c, p) ((parser->heap = (n))->u1.node = (p), \
17572                            (n)->u3.cnt = (c), (p))
17573 
17574 void *
17575 rb_parser_malloc(struct parser_params *parser, size_t size)
17576 {
17577     size_t cnt = HEAPCNT(1, size);
17578     NODE *n = NEWHEAP();
17579     void *ptr = xmalloc(size);
17580 
17581     return ADD2HEAP(n, cnt, ptr);
17582 }
17583 
17584 void *
17585 rb_parser_calloc(struct parser_params *parser, size_t nelem, size_t size)
17586 {
17587     size_t cnt = HEAPCNT(nelem, size);
17588     NODE *n = NEWHEAP();
17589     void *ptr = xcalloc(nelem, size);
17590 
17591     return ADD2HEAP(n, cnt, ptr);
17592 }
17593 
17594 void *
17595 rb_parser_realloc(struct parser_params *parser, void *ptr, size_t size)
17596 {
17597     NODE *n;
17598     size_t cnt = HEAPCNT(1, size);
17599 
17600     if (ptr && (n = parser->heap) != NULL) {
17601         do {
17602             if (n->u1.node == ptr) {
17603                 n->u1.node = ptr = xrealloc(ptr, size);
17604                 if (n->u3.cnt) n->u3.cnt = cnt;
17605                 return ptr;
17606             }
17607         } while ((n = n->u2.node) != NULL);
17608     }
17609     n = NEWHEAP();
17610     ptr = xrealloc(ptr, size);
17611     return ADD2HEAP(n, cnt, ptr);
17612 }
17613 
17614 void
17615 rb_parser_free(struct parser_params *parser, void *ptr)
17616 {
17617     NODE **prev = &parser->heap, *n;
17618 
17619     while ((n = *prev) != NULL) {
17620         if (n->u1.node == ptr) {
17621             *prev = n->u2.node;
17622             rb_gc_force_recycle((VALUE)n);
17623             break;
17624         }
17625         prev = &n->u2.node;
17626     }
17627     xfree(ptr);
17628 }
17629 #endif
17630 #endif
17631 
17632 #ifdef RIPPER
17633 #ifdef RIPPER_DEBUG
17634 extern int rb_is_pointer_to_heap(VALUE);
17635 
17636 /* :nodoc: */
17637 static VALUE
17638 ripper_validate_object(VALUE self, VALUE x)
17639 {
17640     if (x == Qfalse) return x;
17641     if (x == Qtrue) return x;
17642     if (x == Qnil) return x;
17643     if (x == Qundef)
17644         rb_raise(rb_eArgError, "Qundef given");
17645     if (FIXNUM_P(x)) return x;
17646     if (SYMBOL_P(x)) return x;
17647     if (!rb_is_pointer_to_heap(x))
17648         rb_raise(rb_eArgError, "invalid pointer: %p", x);
17649     switch (BUILTIN_TYPE(x)) {
17650       case T_STRING:
17651       case T_OBJECT:
17652       case T_ARRAY:
17653       case T_BIGNUM:
17654       case T_FLOAT:
17655       case T_COMPLEX:
17656       case T_RATIONAL:
17657         return x;
17658       case T_NODE:
17659         if (nd_type(x) != NODE_LASGN) {
17660             rb_raise(rb_eArgError, "NODE given: %p", x);
17661         }
17662         return ((NODE *)x)->nd_rval;
17663       default:
17664         rb_raise(rb_eArgError, "wrong type of ruby object: %p (%s)",
17665                  x, rb_obj_classname(x));
17666     }
17667     return x;
17668 }
17669 #endif
17670 
17671 #define validate(x) ((x) = get_value(x))
17672 
17673 static VALUE
17674 ripper_dispatch0(struct parser_params *parser, ID mid)
17675 {
17676     return rb_funcall(parser->value, mid, 0);
17677 }
17678 
17679 static VALUE
17680 ripper_dispatch1(struct parser_params *parser, ID mid, VALUE a)
17681 {
17682     validate(a);
17683     return rb_funcall(parser->value, mid, 1, a);
17684 }
17685 
17686 static VALUE
17687 ripper_dispatch2(struct parser_params *parser, ID mid, VALUE a, VALUE b)
17688 {
17689     validate(a);
17690     validate(b);
17691     return rb_funcall(parser->value, mid, 2, a, b);
17692 }
17693 
17694 static VALUE
17695 ripper_dispatch3(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c)
17696 {
17697     validate(a);
17698     validate(b);
17699     validate(c);
17700     return rb_funcall(parser->value, mid, 3, a, b, c);
17701 }
17702 
17703 static VALUE
17704 ripper_dispatch4(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c, VALUE d)
17705 {
17706     validate(a);
17707     validate(b);
17708     validate(c);
17709     validate(d);
17710     return rb_funcall(parser->value, mid, 4, a, b, c, d);
17711 }
17712 
17713 static VALUE
17714 ripper_dispatch5(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c, VALUE d, VALUE e)
17715 {
17716     validate(a);
17717     validate(b);
17718     validate(c);
17719     validate(d);
17720     validate(e);
17721     return rb_funcall(parser->value, mid, 5, a, b, c, d, e);
17722 }
17723 
17724 static VALUE
17725 ripper_dispatch7(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c, VALUE d, VALUE e, VALUE f, VALUE g)
17726 {
17727     validate(a);
17728     validate(b);
17729     validate(c);
17730     validate(d);
17731     validate(e);
17732     validate(f);
17733     validate(g);
17734     return rb_funcall(parser->value, mid, 7, a, b, c, d, e, f, g);
17735 }
17736 
17737 static const struct kw_assoc {
17738     ID id;
17739     const char *name;
17740 } keyword_to_name[] = {
17741     {keyword_class,     "class"},
17742     {keyword_module,    "module"},
17743     {keyword_def,       "def"},
17744     {keyword_undef,     "undef"},
17745     {keyword_begin,     "begin"},
17746     {keyword_rescue,    "rescue"},
17747     {keyword_ensure,    "ensure"},
17748     {keyword_end,       "end"},
17749     {keyword_if,        "if"},
17750     {keyword_unless,    "unless"},
17751     {keyword_then,      "then"},
17752     {keyword_elsif,     "elsif"},
17753     {keyword_else,      "else"},
17754     {keyword_case,      "case"},
17755     {keyword_when,      "when"},
17756     {keyword_while,     "while"},
17757     {keyword_until,     "until"},
17758     {keyword_for,       "for"},
17759     {keyword_break,     "break"},
17760     {keyword_next,      "next"},
17761     {keyword_redo,      "redo"},
17762     {keyword_retry,     "retry"},
17763     {keyword_in,        "in"},
17764     {keyword_do,        "do"},
17765     {keyword_do_cond,   "do"},
17766     {keyword_do_block,  "do"},
17767     {keyword_return,    "return"},
17768     {keyword_yield,     "yield"},
17769     {keyword_super,     "super"},
17770     {keyword_self,      "self"},
17771     {keyword_nil,       "nil"},
17772     {keyword_true,      "true"},
17773     {keyword_false,     "false"},
17774     {keyword_and,       "and"},
17775     {keyword_or,        "or"},
17776     {keyword_not,       "not"},
17777     {modifier_if,       "if"},
17778     {modifier_unless,   "unless"},
17779     {modifier_while,    "while"},
17780     {modifier_until,    "until"},
17781     {modifier_rescue,   "rescue"},
17782     {keyword_alias,     "alias"},
17783     {keyword_defined,   "defined?"},
17784     {keyword_BEGIN,     "BEGIN"},
17785     {keyword_END,       "END"},
17786     {keyword__LINE__,   "__LINE__"},
17787     {keyword__FILE__,   "__FILE__"},
17788     {keyword__ENCODING__, "__ENCODING__"},
17789     {0, NULL}
17790 };
17791 
17792 static const char*
17793 keyword_id_to_str(ID id)
17794 {
17795     const struct kw_assoc *a;
17796 
17797     for (a = keyword_to_name; a->id; a++) {
17798         if (a->id == id)
17799             return a->name;
17800     }
17801     return NULL;
17802 }
17803 
17804 #undef ripper_id2sym
17805 static VALUE
17806 ripper_id2sym(ID id)
17807 {
17808     const char *name;
17809     char buf[8];
17810 
17811     if (id <= 256) {
17812         buf[0] = (char)id;
17813         buf[1] = '\0';
17814         return ID2SYM(rb_intern2(buf, 1));
17815     }
17816     if ((name = keyword_id_to_str(id))) {
17817         return ID2SYM(rb_intern(name));
17818     }
17819     switch (id) {
17820       case tOROP:
17821         name = "||";
17822         break;
17823       case tANDOP:
17824         name = "&&";
17825         break;
17826       default:
17827         name = rb_id2name(id);
17828         if (!name) {
17829             rb_bug("cannot convert ID to string: %ld", (unsigned long)id);
17830         }
17831         return ID2SYM(id);
17832     }
17833     return ID2SYM(rb_intern(name));
17834 }
17835 
17836 static ID
17837 ripper_get_id(VALUE v)
17838 {
17839     NODE *nd;
17840     if (!RB_TYPE_P(v, T_NODE)) return 0;
17841     nd = (NODE *)v;
17842     if (nd_type(nd) != NODE_LASGN) return 0;
17843     return nd->nd_vid;
17844 }
17845 
17846 static VALUE
17847 ripper_get_value(VALUE v)
17848 {
17849     NODE *nd;
17850     if (v == Qundef) return Qnil;
17851     if (!RB_TYPE_P(v, T_NODE)) return v;
17852     nd = (NODE *)v;
17853     if (nd_type(nd) != NODE_LASGN) return Qnil;
17854     return nd->nd_rval;
17855 }
17856 
17857 static void
17858 ripper_compile_error(struct parser_params *parser, const char *fmt, ...)
17859 {
17860     VALUE str;
17861     va_list args;
17862 
17863     va_start(args, fmt);
17864     str = rb_vsprintf(fmt, args);
17865     va_end(args);
17866     rb_funcall(parser->value, rb_intern("compile_error"), 1, str);
17867 }
17868 
17869 static void
17870 ripper_warn0(struct parser_params *parser, const char *fmt)
17871 {
17872     rb_funcall(parser->value, rb_intern("warn"), 1, STR_NEW2(fmt));
17873 }
17874 
17875 static void
17876 ripper_warnI(struct parser_params *parser, const char *fmt, int a)
17877 {
17878     rb_funcall(parser->value, rb_intern("warn"), 2,
17879                STR_NEW2(fmt), INT2NUM(a));
17880 }
17881 
17882 static void
17883 ripper_warnS(struct parser_params *parser, const char *fmt, const char *str)
17884 {
17885     rb_funcall(parser->value, rb_intern("warn"), 2,
17886                STR_NEW2(fmt), STR_NEW2(str));
17887 }
17888 
17889 static void
17890 ripper_warning0(struct parser_params *parser, const char *fmt)
17891 {
17892     rb_funcall(parser->value, rb_intern("warning"), 1, STR_NEW2(fmt));
17893 }
17894 
17895 static void
17896 ripper_warningS(struct parser_params *parser, const char *fmt, const char *str)
17897 {
17898     rb_funcall(parser->value, rb_intern("warning"), 2,
17899                STR_NEW2(fmt), STR_NEW2(str));
17900 }
17901 
17902 static VALUE
17903 ripper_lex_get_generic(struct parser_params *parser, VALUE src)
17904 {
17905     return rb_io_gets(src);
17906 }
17907 
17908 static VALUE
17909 ripper_s_allocate(VALUE klass)
17910 {
17911     struct parser_params *p;
17912     VALUE self;
17913 
17914     p = ALLOC_N(struct parser_params, 1);
17915     MEMZERO(p, struct parser_params, 1);
17916     self = TypedData_Wrap_Struct(klass, &parser_data_type, p);
17917     p->value = self;
17918     return self;
17919 }
17920 
17921 #define ripper_initialized_p(r) ((r)->parser_lex_input != 0)
17922 
17923 /*
17924  *  call-seq:
17925  *    Ripper.new(src, filename="(ripper)", lineno=1) -> ripper
17926  *
17927  *  Create a new Ripper object.
17928  *  _src_ must be a String, an IO, or an Object which has #gets method.
17929  *
17930  *  This method does not starts parsing.
17931  *  See also Ripper#parse and Ripper.parse.
17932  */
17933 static VALUE
17934 ripper_initialize(int argc, VALUE *argv, VALUE self)
17935 {
17936     struct parser_params *parser;
17937     VALUE src, fname, lineno;
17938 
17939     TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
17940     rb_scan_args(argc, argv, "12", &src, &fname, &lineno);
17941     if (RB_TYPE_P(src, T_FILE)) {
17942         parser->parser_lex_gets = ripper_lex_get_generic;
17943     }
17944     else {
17945         StringValue(src);
17946         parser->parser_lex_gets = lex_get_str;
17947     }
17948     parser->parser_lex_input = src;
17949     parser->eofp = Qfalse;
17950     if (NIL_P(fname)) {
17951         fname = STR_NEW2("(ripper)");
17952     }
17953     else {
17954         StringValue(fname);
17955     }
17956     parser_initialize(parser);
17957 
17958     parser->parser_ruby_sourcefile_string = fname;
17959     parser->parser_ruby_sourcefile = RSTRING_PTR(fname);
17960     parser->parser_ruby_sourceline = NIL_P(lineno) ? 0 : NUM2INT(lineno) - 1;
17961 
17962     return Qnil;
17963 }
17964 
17965 struct ripper_args {
17966     struct parser_params *parser;
17967     int argc;
17968     VALUE *argv;
17969 };
17970 
17971 static VALUE
17972 ripper_parse0(VALUE parser_v)
17973 {
17974     struct parser_params *parser;
17975 
17976     TypedData_Get_Struct(parser_v, struct parser_params, &parser_data_type, parser);
17977     parser_prepare(parser);
17978     ripper_yyparse((void*)parser);
17979     return parser->result;
17980 }
17981 
17982 static VALUE
17983 ripper_ensure(VALUE parser_v)
17984 {
17985     struct parser_params *parser;
17986 
17987     TypedData_Get_Struct(parser_v, struct parser_params, &parser_data_type, parser);
17988     parser->parsing_thread = Qnil;
17989     return Qnil;
17990 }
17991 
17992 /*
17993  *  call-seq:
17994  *    ripper#parse
17995  *
17996  *  Start parsing and returns the value of the root action.
17997  */
17998 static VALUE
17999 ripper_parse(VALUE self)
18000 {
18001     struct parser_params *parser;
18002 
18003     TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
18004     if (!ripper_initialized_p(parser)) {
18005         rb_raise(rb_eArgError, "method called for uninitialized object");
18006     }
18007     if (!NIL_P(parser->parsing_thread)) {
18008         if (parser->parsing_thread == rb_thread_current())
18009             rb_raise(rb_eArgError, "Ripper#parse is not reentrant");
18010         else
18011             rb_raise(rb_eArgError, "Ripper#parse is not multithread-safe");
18012     }
18013     parser->parsing_thread = rb_thread_current();
18014     rb_ensure(ripper_parse0, self, ripper_ensure, self);
18015 
18016     return parser->result;
18017 }
18018 
18019 /*
18020  *  call-seq:
18021  *    ripper#column   -> Integer
18022  *
18023  *  Return column number of current parsing line.
18024  *  This number starts from 0.
18025  */
18026 static VALUE
18027 ripper_column(VALUE self)
18028 {
18029     struct parser_params *parser;
18030     long col;
18031 
18032     TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
18033     if (!ripper_initialized_p(parser)) {
18034         rb_raise(rb_eArgError, "method called for uninitialized object");
18035     }
18036     if (NIL_P(parser->parsing_thread)) return Qnil;
18037     col = parser->tokp - parser->parser_lex_pbeg;
18038     return LONG2NUM(col);
18039 }
18040 
18041 /*
18042  *  call-seq:
18043  *    ripper#filename   -> String
18044  *
18045  *  Return current parsing filename.
18046  */
18047 static VALUE
18048 ripper_filename(VALUE self)
18049 {
18050     struct parser_params *parser;
18051 
18052     TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
18053     if (!ripper_initialized_p(parser)) {
18054         rb_raise(rb_eArgError, "method called for uninitialized object");
18055     }
18056     return parser->parser_ruby_sourcefile_string;
18057 }
18058 
18059 /*
18060  *  call-seq:
18061  *    ripper#lineno   -> Integer
18062  *
18063  *  Return line number of current parsing line.
18064  *  This number starts from 1.
18065  */
18066 static VALUE
18067 ripper_lineno(VALUE self)
18068 {
18069     struct parser_params *parser;
18070 
18071     TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
18072     if (!ripper_initialized_p(parser)) {
18073         rb_raise(rb_eArgError, "method called for uninitialized object");
18074     }
18075     if (NIL_P(parser->parsing_thread)) return Qnil;
18076     return INT2NUM(parser->parser_ruby_sourceline);
18077 }
18078 
18079 #ifdef RIPPER_DEBUG
18080 /* :nodoc: */
18081 static VALUE
18082 ripper_assert_Qundef(VALUE self, VALUE obj, VALUE msg)
18083 {
18084     StringValue(msg);
18085     if (obj == Qundef) {
18086         rb_raise(rb_eArgError, "%"PRIsVALUE, msg);
18087     }
18088     return Qnil;
18089 }
18090 
18091 /* :nodoc: */
18092 static VALUE
18093 ripper_value(VALUE self, VALUE obj)
18094 {
18095     return ULONG2NUM(obj);
18096 }
18097 #endif
18098 
18099 
18100 void
18101 Init_ripper(void)
18102 {
18103     parser_data_type.parent = RTYPEDDATA_TYPE(rb_parser_new());
18104 
18105     ripper_init_eventids1();
18106     ripper_init_eventids2();
18107     /* ensure existing in symbol table */
18108     (void)rb_intern("||");
18109     (void)rb_intern("&&");
18110 
18111     InitVM(ripper);
18112 }
18113 
18114 void
18115 InitVM_ripper(void)
18116 {
18117     VALUE Ripper;
18118 
18119     Ripper = rb_define_class("Ripper", rb_cObject);
18120     /* version of Ripper */
18121     rb_define_const(Ripper, "Version", rb_usascii_str_new2(RIPPER_VERSION));
18122     rb_define_alloc_func(Ripper, ripper_s_allocate);
18123     rb_define_method(Ripper, "initialize", ripper_initialize, -1);
18124     rb_define_method(Ripper, "parse", ripper_parse, 0);
18125     rb_define_method(Ripper, "column", ripper_column, 0);
18126     rb_define_method(Ripper, "filename", ripper_filename, 0);
18127     rb_define_method(Ripper, "lineno", ripper_lineno, 0);
18128     rb_define_method(Ripper, "end_seen?", rb_parser_end_seen_p, 0);
18129     rb_define_method(Ripper, "encoding", rb_parser_encoding, 0);
18130     rb_define_method(Ripper, "yydebug", rb_parser_get_yydebug, 0);
18131     rb_define_method(Ripper, "yydebug=", rb_parser_set_yydebug, 1);
18132 #ifdef RIPPER_DEBUG
18133     rb_define_method(rb_mKernel, "assert_Qundef", ripper_assert_Qundef, 2);
18134     rb_define_method(rb_mKernel, "rawVALUE", ripper_value, 1);
18135     rb_define_method(rb_mKernel, "validate_object", ripper_validate_object, 1);
18136 #endif
18137 
18138     ripper_init_eventids1_table(Ripper);
18139     ripper_init_eventids2_table(Ripper);
18140 
18141 # if 0
18142     /* Hack to let RDoc document SCRIPT_LINES__ */
18143 
18144     /*
18145      * When a Hash is assigned to +SCRIPT_LINES__+ the contents of files loaded
18146      * after the assignment will be added as an Array of lines with the file
18147      * name as the key.
18148      */
18149     rb_define_global_const("SCRIPT_LINES__", Qnil);
18150 #endif
18151 
18152 }
18153 #endif /* RIPPER */
18154 
18155 

Generated on 19 Jul 2016 for Ruby by  doxygen 1.4.7