summaryrefslogtreecommitdiff
path: root/jni/ruby/parse.c
diff options
context:
space:
mode:
authorJari Vetoniemi <jari.vetoniemi@indooratlas.com>2020-03-16 18:49:26 +0900
committerJari Vetoniemi <jari.vetoniemi@indooratlas.com>2020-03-30 00:39:06 +0900
commitfcbf63e62c627deae76c1b8cb8c0876c536ed811 (patch)
tree64cb17de3f41a2b6fef2368028fbd00349946994 /jni/ruby/parse.c
Fresh start
Diffstat (limited to 'jni/ruby/parse.c')
-rw-r--r--jni/ruby/parse.c17889
1 files changed, 17889 insertions, 0 deletions
diff --git a/jni/ruby/parse.c b/jni/ruby/parse.c
new file mode 100644
index 0000000..9693aad
--- /dev/null
+++ b/jni/ruby/parse.c
@@ -0,0 +1,17889 @@
+/* A Bison parser, made by GNU Bison 2.5. */
+
+/* Bison implementation for Yacc-like parsers in C
+
+ Copyright (C) 1984, 1989-1990, 2000-2011 Free Software Foundation, Inc.
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+/* As a special exception, you may create a larger work that contains
+ part or all of the Bison parser skeleton and distribute that work
+ under terms of your choice, so long as that work isn't itself a
+ parser generator using the skeleton or a modified version thereof
+ as a parser skeleton. Alternatively, if you modify or redistribute
+ the parser skeleton itself, you may (at your option) remove this
+ special exception, which will cause the skeleton and the resulting
+ Bison output files to be licensed under the GNU General Public
+ License without this special exception.
+
+ This special exception was added by the Free Software Foundation in
+ version 2.2 of Bison. */
+
+/* C LALR(1) parser skeleton written by Richard Stallman, by
+ simplifying the original so-called "semantic" parser. */
+
+/* All symbols defined below should begin with yy or YY, to avoid
+ infringing on user name space. This should be done even for local
+ variables, as they might otherwise be expanded by user macros.
+ There are some unavoidable exceptions within include files to
+ define necessary library symbols; they are noted "INFRINGES ON
+ USER NAME SPACE" below. */
+
+/* Identify Bison output. */
+#define YYBISON 1
+
+/* Bison version. */
+#define YYBISON_VERSION "2.5"
+
+/* Skeleton name. */
+#define YYSKELETON_NAME "yacc.c"
+
+/* Pure parsers. */
+#define YYPURE 1
+
+/* Push parsers. */
+#define YYPUSH 0
+
+/* Pull parsers. */
+#define YYPULL 1
+
+/* Using locations. */
+#define YYLSP_NEEDED 0
+
+
+
+/* Copy the first part of user declarations. */
+
+/* Line 268 of yacc.c */
+#line 12 "parse.y"
+
+
+#ifndef PARSER_DEBUG
+#define PARSER_DEBUG 0
+#endif
+#define YYDEBUG 1
+#define YYERROR_VERBOSE 1
+#define YYSTACK_USE_ALLOCA 0
+
+#include "ruby/ruby.h"
+#include "ruby/st.h"
+#include "ruby/encoding.h"
+#include "internal.h"
+#include "node.h"
+#include "parse.h"
+#include "symbol.h"
+#include "regenc.h"
+#include <stdio.h>
+#include <errno.h>
+#include <ctype.h>
+#include "probes.h"
+
+#ifndef WARN_PAST_SCOPE
+# define WARN_PAST_SCOPE 0
+#endif
+
+#define YYMALLOC(size) rb_parser_malloc(parser, (size))
+#define YYREALLOC(ptr, size) rb_parser_realloc(parser, (ptr), (size))
+#define YYCALLOC(nelem, size) rb_parser_calloc(parser, (nelem), (size))
+#define YYFREE(ptr) rb_parser_free(parser, (ptr))
+#undef malloc
+#undef realloc
+#undef calloc
+#undef free
+#define malloc YYMALLOC
+#define realloc YYREALLOC
+#define calloc YYCALLOC
+#define free YYFREE
+
+enum lex_state_bits {
+ EXPR_BEG_bit, /* ignore newline, +/- is a sign. */
+ EXPR_END_bit, /* newline significant, +/- is an operator. */
+ EXPR_ENDARG_bit, /* ditto, and unbound braces. */
+ EXPR_ENDFN_bit, /* ditto, and unbound braces. */
+ EXPR_ARG_bit, /* newline significant, +/- is an operator. */
+ EXPR_CMDARG_bit, /* newline significant, +/- is an operator. */
+ EXPR_MID_bit, /* newline significant, +/- is an operator. */
+ EXPR_FNAME_bit, /* ignore newline, no reserved words. */
+ EXPR_DOT_bit, /* right after `.' or `::', no reserved words. */
+ EXPR_CLASS_bit, /* immediate after `class', no here document. */
+ EXPR_VALUE_bit, /* alike EXPR_BEG but label is disallowed. */
+ EXPR_LABELARG_bit, /* ignore significant, +/- is a sign. */
+ EXPR_MAX_STATE
+};
+/* examine combinations */
+enum lex_state_e {
+#define DEF_EXPR(n) EXPR_##n = (1 << EXPR_##n##_bit)
+ DEF_EXPR(BEG),
+ DEF_EXPR(END),
+ DEF_EXPR(ENDARG),
+ DEF_EXPR(ENDFN),
+ DEF_EXPR(ARG),
+ DEF_EXPR(CMDARG),
+ DEF_EXPR(MID),
+ DEF_EXPR(FNAME),
+ DEF_EXPR(DOT),
+ DEF_EXPR(CLASS),
+ DEF_EXPR(VALUE),
+ DEF_EXPR(LABELARG),
+ EXPR_BEG_ANY = (EXPR_BEG | EXPR_VALUE | EXPR_MID | EXPR_CLASS | EXPR_LABELARG),
+ EXPR_ARG_ANY = (EXPR_ARG | EXPR_CMDARG),
+ EXPR_END_ANY = (EXPR_END | EXPR_ENDARG | EXPR_ENDFN)
+};
+#define IS_lex_state_for(x, ls) ((x) & (ls))
+#define IS_lex_state(ls) IS_lex_state_for(lex_state, (ls))
+
+#if PARSER_DEBUG
+static const char *lex_state_name(enum lex_state_e state);
+#endif
+
+typedef VALUE stack_type;
+
+# define BITSTACK_PUSH(stack, n) ((stack) = ((stack)<<1)|((n)&1))
+# define BITSTACK_POP(stack) ((stack) = (stack) >> 1)
+# define BITSTACK_LEXPOP(stack) ((stack) = ((stack) >> 1) | ((stack) & 1))
+# define BITSTACK_SET_P(stack) ((stack)&1)
+
+#define COND_PUSH(n) BITSTACK_PUSH(cond_stack, (n))
+#define COND_POP() BITSTACK_POP(cond_stack)
+#define COND_LEXPOP() BITSTACK_LEXPOP(cond_stack)
+#define COND_P() BITSTACK_SET_P(cond_stack)
+
+#define CMDARG_PUSH(n) BITSTACK_PUSH(cmdarg_stack, (n))
+#define CMDARG_POP() BITSTACK_POP(cmdarg_stack)
+#define CMDARG_LEXPOP() BITSTACK_LEXPOP(cmdarg_stack)
+#define CMDARG_P() BITSTACK_SET_P(cmdarg_stack)
+
+struct vtable {
+ ID *tbl;
+ int pos;
+ int capa;
+ struct vtable *prev;
+};
+
+struct local_vars {
+ struct vtable *args;
+ struct vtable *vars;
+ struct vtable *used;
+# if WARN_PAST_SCOPE
+ struct vtable *past;
+# endif
+ struct local_vars *prev;
+ stack_type cmdargs;
+};
+
+#define DVARS_INHERIT ((void*)1)
+#define DVARS_TOPSCOPE NULL
+#define DVARS_SPECIAL_P(tbl) (!POINTER_P(tbl))
+#define POINTER_P(val) ((VALUE)(val) & ~(VALUE)3)
+
+static int
+vtable_size(const struct vtable *tbl)
+{
+ if (POINTER_P(tbl)) {
+ return tbl->pos;
+ }
+ else {
+ return 0;
+ }
+}
+
+#define VTBL_DEBUG 0
+
+static struct vtable *
+vtable_alloc(struct vtable *prev)
+{
+ struct vtable *tbl = ALLOC(struct vtable);
+ tbl->pos = 0;
+ tbl->capa = 8;
+ tbl->tbl = ALLOC_N(ID, tbl->capa);
+ tbl->prev = prev;
+ if (VTBL_DEBUG) printf("vtable_alloc: %p\n", (void *)tbl);
+ return tbl;
+}
+
+static void
+vtable_free(struct vtable *tbl)
+{
+ if (VTBL_DEBUG)printf("vtable_free: %p\n", (void *)tbl);
+ if (POINTER_P(tbl)) {
+ if (tbl->tbl) {
+ xfree(tbl->tbl);
+ }
+ xfree(tbl);
+ }
+}
+
+static void
+vtable_add(struct vtable *tbl, ID id)
+{
+ if (!POINTER_P(tbl)) {
+ rb_bug("vtable_add: vtable is not allocated (%p)", (void *)tbl);
+ }
+ if (VTBL_DEBUG) printf("vtable_add: %p, %"PRIsVALUE"\n", (void *)tbl, rb_id2str(id));
+
+ if (tbl->pos == tbl->capa) {
+ tbl->capa = tbl->capa * 2;
+ REALLOC_N(tbl->tbl, ID, tbl->capa);
+ }
+ tbl->tbl[tbl->pos++] = id;
+}
+
+#ifndef RIPPER
+static void
+vtable_pop(struct vtable *tbl, int n)
+{
+ if (tbl->pos < n) rb_bug("vtable_pop: unreachable");
+ tbl->pos -= n;
+}
+#endif
+
+static int
+vtable_included(const struct vtable * tbl, ID id)
+{
+ int i;
+
+ if (POINTER_P(tbl)) {
+ for (i = 0; i < tbl->pos; i++) {
+ if (tbl->tbl[i] == id) {
+ return i+1;
+ }
+ }
+ }
+ return 0;
+}
+
+
+#ifndef RIPPER
+typedef struct token_info {
+ const char *token;
+ int linenum;
+ int column;
+ int nonspc;
+ struct token_info *next;
+} token_info;
+#endif
+
+/*
+ Structure of Lexer Buffer:
+
+ lex_pbeg tokp lex_p lex_pend
+ | | | |
+ |-----------+--------------+------------|
+ |<------------>|
+ token
+*/
+struct parser_params {
+ NODE *heap;
+
+ YYSTYPE *parser_yylval;
+ VALUE eofp;
+
+ NODE *parser_lex_strterm;
+ stack_type parser_cond_stack;
+ stack_type parser_cmdarg_stack;
+ enum lex_state_e parser_lex_state;
+ int parser_paren_nest;
+ int parser_lpar_beg;
+ int parser_in_single;
+ int parser_in_def;
+ int parser_brace_nest;
+ int parser_compile_for_eval;
+ int parser_in_kwarg;
+ int parser_in_defined;
+ int parser_tokidx;
+ int parser_toksiz;
+ int parser_tokline;
+ char *parser_tokenbuf;
+ VALUE parser_lex_input;
+ VALUE parser_lex_lastline;
+ VALUE parser_lex_nextline;
+ const char *parser_lex_pbeg;
+ const char *parser_lex_p;
+ const char *parser_lex_pend;
+ int parser_heredoc_end;
+ int parser_command_start;
+ NODE *parser_deferred_nodes;
+ long parser_lex_gets_ptr;
+ VALUE (*parser_lex_gets)(struct parser_params*,VALUE);
+ struct local_vars *parser_lvtbl;
+ int line_count;
+ int parser_ruby_sourceline; /* current line no. */
+ char *parser_ruby_sourcefile; /* current source file */
+ VALUE parser_ruby_sourcefile_string;
+ rb_encoding *enc;
+
+ ID cur_arg;
+
+ int last_cr_line;
+
+ unsigned int parser_ruby__end__seen: 1;
+ unsigned int parser_yydebug: 1;
+ unsigned int has_shebang: 1;
+
+#ifndef RIPPER
+ /* Ruby core only */
+ unsigned int parser_token_info_enabled: 1;
+# if WARN_PAST_SCOPE
+ unsigned int parser_past_scope_enabled: 1;
+# endif
+ int nerr;
+
+ NODE *parser_eval_tree_begin;
+ NODE *parser_eval_tree;
+ VALUE debug_lines;
+ VALUE coverage;
+
+ token_info *parser_token_info;
+#else
+ /* Ripper only */
+ unsigned int toplevel_p: 1;
+ unsigned int error_p: 1;
+
+ const char *tokp;
+ VALUE delayed;
+ int delayed_line;
+ int delayed_col;
+
+ VALUE value;
+ VALUE result;
+ VALUE parsing_thread;
+#endif
+};
+
+#ifdef RIPPER
+#define intern_cstr(n,l,en) rb_intern3(n,l,en)
+#else
+#define intern_cstr(n,l,en) rb_intern3(n,l,en)
+#endif
+
+#define STR_NEW(p,n) rb_enc_str_new((p),(n),current_enc)
+#define STR_NEW0() rb_enc_str_new(0,0,current_enc)
+#define STR_NEW2(p) rb_enc_str_new((p),strlen(p),current_enc)
+#define STR_NEW3(p,n,e,func) parser_str_new((p),(n),(e),(func),current_enc)
+#define TOK_INTERN() intern_cstr(tok(), toklen(), current_enc)
+
+static int parser_yyerror(struct parser_params*, const char*);
+#define yyerror(msg) parser_yyerror(parser, (msg))
+
+#define lex_strterm (parser->parser_lex_strterm)
+#define lex_state (parser->parser_lex_state)
+#define cond_stack (parser->parser_cond_stack)
+#define cmdarg_stack (parser->parser_cmdarg_stack)
+#define paren_nest (parser->parser_paren_nest)
+#define lpar_beg (parser->parser_lpar_beg)
+#define brace_nest (parser->parser_brace_nest)
+#define in_single (parser->parser_in_single)
+#define in_def (parser->parser_in_def)
+#define compile_for_eval (parser->parser_compile_for_eval)
+#define in_defined (parser->parser_in_defined)
+#define tokenbuf (parser->parser_tokenbuf)
+#define tokidx (parser->parser_tokidx)
+#define toksiz (parser->parser_toksiz)
+#define tokline (parser->parser_tokline)
+#define lex_input (parser->parser_lex_input)
+#define lex_lastline (parser->parser_lex_lastline)
+#define lex_nextline (parser->parser_lex_nextline)
+#define lex_pbeg (parser->parser_lex_pbeg)
+#define lex_p (parser->parser_lex_p)
+#define lex_pend (parser->parser_lex_pend)
+#define heredoc_end (parser->parser_heredoc_end)
+#define command_start (parser->parser_command_start)
+#define deferred_nodes (parser->parser_deferred_nodes)
+#define lex_gets_ptr (parser->parser_lex_gets_ptr)
+#define lex_gets (parser->parser_lex_gets)
+#define lvtbl (parser->parser_lvtbl)
+#define ruby__end__seen (parser->parser_ruby__end__seen)
+#define ruby_sourceline (parser->parser_ruby_sourceline)
+#define ruby_sourcefile (parser->parser_ruby_sourcefile)
+#define ruby_sourcefile_string (parser->parser_ruby_sourcefile_string)
+#define current_enc (parser->enc)
+#define current_arg (parser->cur_arg)
+#define yydebug (parser->parser_yydebug)
+#ifdef RIPPER
+#else
+#define ruby_eval_tree (parser->parser_eval_tree)
+#define ruby_eval_tree_begin (parser->parser_eval_tree_begin)
+#define ruby_debug_lines (parser->debug_lines)
+#define ruby_coverage (parser->coverage)
+#endif
+
+#if YYPURE
+static int yylex(void*, void*);
+#else
+static int yylex(void*);
+#endif
+
+#ifndef RIPPER
+#define yyparse ruby_yyparse
+
+static NODE* node_newnode(struct parser_params *, enum node_type, VALUE, VALUE, VALUE);
+#define rb_node_newnode(type, a1, a2, a3) node_newnode(parser, (type), (a1), (a2), (a3))
+
+static NODE *cond_gen(struct parser_params*,NODE*);
+#define cond(node) cond_gen(parser, (node))
+static NODE *logop_gen(struct parser_params*,enum node_type,NODE*,NODE*);
+#define logop(type,node1,node2) logop_gen(parser, (type), (node1), (node2))
+
+static NODE *newline_node(NODE*);
+static void fixpos(NODE*,NODE*);
+
+static int value_expr_gen(struct parser_params*,NODE*);
+static void void_expr_gen(struct parser_params*,NODE*);
+static NODE *remove_begin(NODE*);
+static NODE *remove_begin_all(NODE*);
+#define value_expr(node) value_expr_gen(parser, (node) = remove_begin(node))
+#define void_expr0(node) void_expr_gen(parser, (node))
+#define void_expr(node) void_expr0((node) = remove_begin(node))
+static void void_stmts_gen(struct parser_params*,NODE*);
+#define void_stmts(node) void_stmts_gen(parser, (node))
+static void reduce_nodes_gen(struct parser_params*,NODE**);
+#define reduce_nodes(n) reduce_nodes_gen(parser,(n))
+static void block_dup_check_gen(struct parser_params*,NODE*,NODE*);
+#define block_dup_check(n1,n2) block_dup_check_gen(parser,(n1),(n2))
+
+static NODE *block_append_gen(struct parser_params*,NODE*,NODE*);
+#define block_append(h,t) block_append_gen(parser,(h),(t))
+static NODE *list_append_gen(struct parser_params*,NODE*,NODE*);
+#define list_append(l,i) list_append_gen(parser,(l),(i))
+static NODE *list_concat(NODE*,NODE*);
+static NODE *arg_append_gen(struct parser_params*,NODE*,NODE*);
+#define arg_append(h,t) arg_append_gen(parser,(h),(t))
+static NODE *arg_concat_gen(struct parser_params*,NODE*,NODE*);
+#define arg_concat(h,t) arg_concat_gen(parser,(h),(t))
+static NODE *literal_concat_gen(struct parser_params*,NODE*,NODE*);
+#define literal_concat(h,t) literal_concat_gen(parser,(h),(t))
+static int literal_concat0(struct parser_params *, VALUE, VALUE);
+static NODE *new_evstr_gen(struct parser_params*,NODE*);
+#define new_evstr(n) new_evstr_gen(parser,(n))
+static NODE *evstr2dstr_gen(struct parser_params*,NODE*);
+#define evstr2dstr(n) evstr2dstr_gen(parser,(n))
+static NODE *splat_array(NODE*);
+
+static NODE *call_bin_op_gen(struct parser_params*,NODE*,ID,NODE*);
+#define call_bin_op(recv,id,arg1) call_bin_op_gen(parser, (recv),(id),(arg1))
+static NODE *call_uni_op_gen(struct parser_params*,NODE*,ID);
+#define call_uni_op(recv,id) call_uni_op_gen(parser, (recv),(id))
+
+static NODE *new_args_gen(struct parser_params*,NODE*,NODE*,ID,NODE*,NODE*);
+#define new_args(f,o,r,p,t) new_args_gen(parser, (f),(o),(r),(p),(t))
+static NODE *new_args_tail_gen(struct parser_params*,NODE*,ID,ID);
+#define new_args_tail(k,kr,b) new_args_tail_gen(parser, (k),(kr),(b))
+#define new_kw_arg(k) ((k) ? NEW_KW_ARG(0, (k)) : 0)
+
+static VALUE negate_lit(VALUE);
+static NODE *ret_args_gen(struct parser_params*,NODE*);
+#define ret_args(node) ret_args_gen(parser, (node))
+static NODE *arg_blk_pass(NODE*,NODE*);
+static NODE *new_yield_gen(struct parser_params*,NODE*);
+#define new_yield(node) new_yield_gen(parser, (node))
+static NODE *dsym_node_gen(struct parser_params*,NODE*);
+#define dsym_node(node) dsym_node_gen(parser, (node))
+
+static NODE *gettable_gen(struct parser_params*,ID);
+#define gettable(id) gettable_gen(parser,(id))
+static NODE *assignable_gen(struct parser_params*,ID,NODE*);
+#define assignable(id,node) assignable_gen(parser, (id), (node))
+
+static NODE *aryset_gen(struct parser_params*,NODE*,NODE*);
+#define aryset(node1,node2) aryset_gen(parser, (node1), (node2))
+static NODE *attrset_gen(struct parser_params*,NODE*,ID);
+#define attrset(node,id) attrset_gen(parser, (node), (id))
+
+static void rb_backref_error_gen(struct parser_params*,NODE*);
+#define rb_backref_error(n) rb_backref_error_gen(parser,(n))
+static NODE *node_assign_gen(struct parser_params*,NODE*,NODE*);
+#define node_assign(node1, node2) node_assign_gen(parser, (node1), (node2))
+
+static NODE *new_op_assign_gen(struct parser_params *parser, NODE *lhs, ID op, NODE *rhs);
+static NODE *new_attr_op_assign_gen(struct parser_params *parser, NODE *lhs, ID attr, ID op, NODE *rhs);
+#define new_attr_op_assign(lhs, type, attr, op, rhs) new_attr_op_assign_gen(parser, (lhs), (attr), (op), (rhs))
+static NODE *new_const_op_assign_gen(struct parser_params *parser, NODE *lhs, ID op, NODE *rhs);
+#define new_const_op_assign(lhs, op, rhs) new_const_op_assign_gen(parser, (lhs), (op), (rhs))
+
+static NODE *new_hash_gen(struct parser_params *parser, NODE *hash);
+#define new_hash(hash) new_hash_gen(parser, (hash))
+
+#define new_defined(expr) NEW_DEFINED(remove_begin_all(expr))
+
+static NODE *match_op_gen(struct parser_params*,NODE*,NODE*);
+#define match_op(node1,node2) match_op_gen(parser, (node1), (node2))
+
+static ID *local_tbl_gen(struct parser_params*);
+#define local_tbl() local_tbl_gen(parser)
+
+static void fixup_nodes(NODE **);
+
+static VALUE reg_compile_gen(struct parser_params*, VALUE, int);
+#define reg_compile(str,options) reg_compile_gen(parser, (str), (options))
+static void reg_fragment_setenc_gen(struct parser_params*, VALUE, int);
+#define reg_fragment_setenc(str,options) reg_fragment_setenc_gen(parser, (str), (options))
+static int reg_fragment_check_gen(struct parser_params*, VALUE, int);
+#define reg_fragment_check(str,options) reg_fragment_check_gen(parser, (str), (options))
+static NODE *reg_named_capture_assign_gen(struct parser_params* parser, VALUE regexp, NODE *match);
+#define reg_named_capture_assign(regexp,match) reg_named_capture_assign_gen(parser,(regexp),(match))
+
+#define get_id(id) (id)
+#define get_value(val) (val)
+#else
+#define NODE_RIPPER NODE_CDECL
+
+static inline VALUE
+ripper_new_yylval(ID a, VALUE b, VALUE c)
+{
+ return (VALUE)NEW_CDECL(a, b, c);
+}
+
+static inline int
+ripper_is_node_yylval(VALUE n)
+{
+ return RB_TYPE_P(n, T_NODE) && nd_type(RNODE(n)) == NODE_RIPPER;
+}
+
+#define value_expr(node) ((void)(node))
+#define remove_begin(node) (node)
+#define rb_dvar_defined(id) 0
+#define rb_local_defined(id) 0
+static ID ripper_get_id(VALUE);
+#define get_id(id) ripper_get_id(id)
+static VALUE ripper_get_value(VALUE);
+#define get_value(val) ripper_get_value(val)
+static VALUE assignable_gen(struct parser_params*,VALUE);
+#define assignable(lhs,node) assignable_gen(parser, (lhs))
+static int id_is_var_gen(struct parser_params *parser, ID id);
+#define id_is_var(id) id_is_var_gen(parser, (id))
+
+#define node_assign(node1, node2) dispatch2(assign, (node1), (node2))
+
+static VALUE new_op_assign_gen(struct parser_params *parser, VALUE lhs, VALUE op, VALUE rhs);
+static VALUE new_attr_op_assign_gen(struct parser_params *parser, VALUE lhs, VALUE type, VALUE attr, VALUE op, VALUE rhs);
+#define new_attr_op_assign(lhs, type, attr, op, rhs) new_attr_op_assign_gen(parser, (lhs), (type), (attr), (op), (rhs))
+
+#endif /* !RIPPER */
+
+#define new_op_assign(lhs, op, rhs) new_op_assign_gen(parser, (lhs), (op), (rhs))
+
+RUBY_FUNC_EXPORTED VALUE rb_parser_reg_compile(struct parser_params* parser, VALUE str, int options, VALUE *errmsg);
+
+static ID formal_argument_gen(struct parser_params*, ID);
+#define formal_argument(id) formal_argument_gen(parser, (id))
+static ID shadowing_lvar_gen(struct parser_params*,ID);
+#define shadowing_lvar(name) shadowing_lvar_gen(parser, (name))
+static void new_bv_gen(struct parser_params*,ID);
+#define new_bv(id) new_bv_gen(parser, (id))
+
+static void local_push_gen(struct parser_params*,int);
+#define local_push(top) local_push_gen(parser,(top))
+static void local_pop_gen(struct parser_params*);
+#define local_pop() local_pop_gen(parser)
+static void local_var_gen(struct parser_params*, ID);
+#define local_var(id) local_var_gen(parser, (id))
+static void arg_var_gen(struct parser_params*, ID);
+#define arg_var(id) arg_var_gen(parser, (id))
+static int local_id_gen(struct parser_params*, ID);
+#define local_id(id) local_id_gen(parser, (id))
+static ID internal_id_gen(struct parser_params*);
+#define internal_id() internal_id_gen(parser)
+
+static const struct vtable *dyna_push_gen(struct parser_params *);
+#define dyna_push() dyna_push_gen(parser)
+static void dyna_pop_gen(struct parser_params*, const struct vtable *);
+#define dyna_pop(node) dyna_pop_gen(parser, (node))
+static int dyna_in_block_gen(struct parser_params*);
+#define dyna_in_block() dyna_in_block_gen(parser)
+#define dyna_var(id) local_var(id)
+static int dvar_defined_gen(struct parser_params*,ID,int);
+#define dvar_defined(id) dvar_defined_gen(parser, (id), 0)
+#define dvar_defined_get(id) dvar_defined_gen(parser, (id), 1)
+static int dvar_curr_gen(struct parser_params*,ID);
+#define dvar_curr(id) dvar_curr_gen(parser, (id))
+
+static int lvar_defined_gen(struct parser_params*, ID);
+#define lvar_defined(id) lvar_defined_gen(parser, (id))
+
+#define RE_OPTION_ONCE (1<<16)
+#define RE_OPTION_ENCODING_SHIFT 8
+#define RE_OPTION_ENCODING(e) (((e)&0xff)<<RE_OPTION_ENCODING_SHIFT)
+#define RE_OPTION_ENCODING_IDX(o) (((o)>>RE_OPTION_ENCODING_SHIFT)&0xff)
+#define RE_OPTION_ENCODING_NONE(o) ((o)&RE_OPTION_ARG_ENCODING_NONE)
+#define RE_OPTION_MASK 0xff
+#define RE_OPTION_ARG_ENCODING_NONE 32
+
+#define NODE_STRTERM NODE_ZARRAY /* nothing to gc */
+#define NODE_HEREDOC NODE_ARRAY /* 1, 3 to gc */
+#define SIGN_EXTEND(x,n) (((1<<(n)-1)^((x)&~(~0<<(n))))-(1<<(n)-1))
+#define nd_func u1.id
+#if SIZEOF_SHORT == 2
+#define nd_term(node) ((signed short)(node)->u2.id)
+#else
+#define nd_term(node) SIGN_EXTEND((node)->u2.id, CHAR_BIT*2)
+#endif
+#define nd_paren(node) (char)((node)->u2.id >> CHAR_BIT*2)
+#define nd_nest u3.cnt
+
+/****** Ripper *******/
+
+#ifdef RIPPER
+#define RIPPER_VERSION "0.1.0"
+
+static inline VALUE intern_sym(const char *name);
+
+#include "eventids1.c"
+#include "eventids2.c"
+
+static VALUE ripper_dispatch0(struct parser_params*,ID);
+static VALUE ripper_dispatch1(struct parser_params*,ID,VALUE);
+static VALUE ripper_dispatch2(struct parser_params*,ID,VALUE,VALUE);
+static VALUE ripper_dispatch3(struct parser_params*,ID,VALUE,VALUE,VALUE);
+static VALUE ripper_dispatch4(struct parser_params*,ID,VALUE,VALUE,VALUE,VALUE);
+static VALUE ripper_dispatch5(struct parser_params*,ID,VALUE,VALUE,VALUE,VALUE,VALUE);
+static VALUE ripper_dispatch7(struct parser_params*,ID,VALUE,VALUE,VALUE,VALUE,VALUE,VALUE,VALUE);
+static void ripper_error_gen(struct parser_params *parser);
+#define ripper_error() ripper_error_gen(parser)
+
+#define dispatch0(n) ripper_dispatch0(parser, TOKEN_PASTE(ripper_id_, n))
+#define dispatch1(n,a) ripper_dispatch1(parser, TOKEN_PASTE(ripper_id_, n), (a))
+#define dispatch2(n,a,b) ripper_dispatch2(parser, TOKEN_PASTE(ripper_id_, n), (a), (b))
+#define dispatch3(n,a,b,c) ripper_dispatch3(parser, TOKEN_PASTE(ripper_id_, n), (a), (b), (c))
+#define dispatch4(n,a,b,c,d) ripper_dispatch4(parser, TOKEN_PASTE(ripper_id_, n), (a), (b), (c), (d))
+#define dispatch5(n,a,b,c,d,e) ripper_dispatch5(parser, TOKEN_PASTE(ripper_id_, n), (a), (b), (c), (d), (e))
+#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))
+
+#define yyparse ripper_yyparse
+
+#define ripper_intern(s) ID2SYM(rb_intern(s))
+static VALUE ripper_id2sym(ID);
+#ifdef __GNUC__
+#define ripper_id2sym(id) ((id) < 256 && rb_ispunct(id) ? \
+ ID2SYM(id) : ripper_id2sym(id))
+#endif
+
+#define arg_new() dispatch0(args_new)
+#define arg_add(l,a) dispatch2(args_add, (l), (a))
+#define arg_add_star(l,a) dispatch2(args_add_star, (l), (a))
+#define arg_add_block(l,b) dispatch2(args_add_block, (l), (b))
+#define arg_add_optblock(l,b) ((b)==Qundef? (l) : dispatch2(args_add_block, (l), (b)))
+#define bare_assoc(v) dispatch1(bare_assoc_hash, (v))
+#define arg_add_assocs(l,b) arg_add((l), bare_assoc(b))
+
+#define args2mrhs(a) dispatch1(mrhs_new_from_args, (a))
+#define mrhs_new() dispatch0(mrhs_new)
+#define mrhs_add(l,a) dispatch2(mrhs_add, (l), (a))
+#define mrhs_add_star(l,a) dispatch2(mrhs_add_star, (l), (a))
+
+#define mlhs_new() dispatch0(mlhs_new)
+#define mlhs_add(l,a) dispatch2(mlhs_add, (l), (a))
+#define mlhs_add_star(l,a) dispatch2(mlhs_add_star, (l), (a))
+
+#define params_new(pars, opts, rest, pars2, kws, kwrest, blk) \
+ dispatch7(params, (pars), (opts), (rest), (pars2), (kws), (kwrest), (blk))
+
+#define blockvar_new(p,v) dispatch2(block_var, (p), (v))
+#define blockvar_add_star(l,a) dispatch2(block_var_add_star, (l), (a))
+#define blockvar_add_block(l,a) dispatch2(block_var_add_block, (l), (a))
+
+#define method_optarg(m,a) ((a)==Qundef ? (m) : dispatch2(method_add_arg,(m),(a)))
+#define method_arg(m,a) dispatch2(method_add_arg,(m),(a))
+#define method_add_block(m,b) dispatch2(method_add_block, (m), (b))
+
+#define escape_Qundef(x) ((x)==Qundef ? Qnil : (x))
+
+static inline VALUE
+new_args_gen(struct parser_params *parser, VALUE f, VALUE o, VALUE r, VALUE p, VALUE tail)
+{
+ NODE *t = (NODE *)tail;
+ VALUE k = t->u1.value, kr = t->u2.value, b = t->u3.value;
+ return params_new(f, o, r, p, k, kr, escape_Qundef(b));
+}
+#define new_args(f,o,r,p,t) new_args_gen(parser, (f),(o),(r),(p),(t))
+
+static inline VALUE
+new_args_tail_gen(struct parser_params *parser, VALUE k, VALUE kr, VALUE b)
+{
+ return (VALUE)rb_node_newnode(NODE_MEMO, k, kr, b);
+}
+#define new_args_tail(k,kr,b) new_args_tail_gen(parser, (k),(kr),(b))
+
+#define new_defined(expr) dispatch1(defined, (expr))
+
+#define FIXME 0
+
+#endif /* RIPPER */
+
+#ifndef RIPPER
+# define Qnone 0
+# define ifndef_ripper(x) (x)
+#else
+# define Qnone Qnil
+# define ifndef_ripper(x)
+#endif
+
+#ifndef RIPPER
+# define rb_warn0(fmt) rb_compile_warn(ruby_sourcefile, ruby_sourceline, (fmt))
+# define rb_warnI(fmt,a) rb_compile_warn(ruby_sourcefile, ruby_sourceline, (fmt), (a))
+# define rb_warnS(fmt,a) rb_compile_warn(ruby_sourcefile, ruby_sourceline, (fmt), (a))
+# define rb_warnV(fmt,a) rb_compile_warn(ruby_sourcefile, ruby_sourceline, (fmt), (a))
+# define rb_warn4S(file,line,fmt,a) rb_compile_warn((file), (line), (fmt), (a))
+# define rb_warn4V(file,line,fmt,a) rb_compile_warn((file), (line), (fmt), (a))
+# define rb_warning0(fmt) rb_compile_warning(ruby_sourcefile, ruby_sourceline, (fmt))
+# define rb_warningS(fmt,a) rb_compile_warning(ruby_sourcefile, ruby_sourceline, (fmt), (a))
+# define rb_warningV(fmt,a) rb_compile_warning(ruby_sourcefile, ruby_sourceline, (fmt), (a))
+#else
+# define rb_warn0(fmt) ripper_warn0(parser, (fmt))
+# define rb_warnI(fmt,a) ripper_warnI(parser, (fmt), (a))
+# define rb_warnS(fmt,a) ripper_warnS(parser, (fmt), (a))
+# define rb_warnV(fmt,a) ripper_warnV(parser, (fmt), (a))
+# define rb_warn4S(file,line,fmt,a) ripper_warnS(parser, (fmt), (a))
+# define rb_warn4V(file,line,fmt,a) ripper_warnV(parser, (fmt), (a))
+# define rb_warning0(fmt) ripper_warning0(parser, (fmt))
+# define rb_warningS(fmt,a) ripper_warningS(parser, (fmt), (a))
+# define rb_warningV(fmt,a) ripper_warningV(parser, (fmt), (a))
+static void ripper_warn0(struct parser_params*, const char*);
+static void ripper_warnI(struct parser_params*, const char*, int);
+static void ripper_warnS(struct parser_params*, const char*, const char*);
+static void ripper_warnV(struct parser_params*, const char*, VALUE);
+static void ripper_warning0(struct parser_params*, const char*);
+static void ripper_warningS(struct parser_params*, const char*, const char*);
+static void ripper_warningV(struct parser_params*, const char*, VALUE);
+#endif
+
+#ifdef RIPPER
+static void ripper_compile_error(struct parser_params*, const char *fmt, ...);
+# define rb_compile_error ripper_compile_error
+# define compile_error ripper_compile_error
+# define PARSER_ARG parser,
+#else
+# define rb_compile_error rb_compile_error_with_enc
+# define compile_error parser->nerr++,rb_compile_error_with_enc
+# define PARSER_ARG ruby_sourcefile, ruby_sourceline, (void *)current_enc,
+#endif
+
+/* Older versions of Yacc set YYMAXDEPTH to a very low value by default (150,
+ for instance). This is too low for Ruby to parse some files, such as
+ date/format.rb, therefore bump the value up to at least Bison's default. */
+#ifdef OLD_YACC
+#ifndef YYMAXDEPTH
+#define YYMAXDEPTH 10000
+#endif
+#endif
+
+#ifndef RIPPER
+static void token_info_push(struct parser_params*, const char *token);
+static void token_info_pop(struct parser_params*, const char *token);
+#define token_info_push(token) (RTEST(ruby_verbose) ? token_info_push(parser, (token)) : (void)0)
+#define token_info_pop(token) (RTEST(ruby_verbose) ? token_info_pop(parser, (token)) : (void)0)
+#else
+#define token_info_push(token) /* nothing */
+#define token_info_pop(token) /* nothing */
+#endif
+
+
+/* Line 268 of yacc.c */
+#line 793 "parse.c"
+
+/* Enabling traces. */
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+
+/* Enabling verbose error messages. */
+#ifdef YYERROR_VERBOSE
+# undef YYERROR_VERBOSE
+# define YYERROR_VERBOSE 1
+#else
+# define YYERROR_VERBOSE 0
+#endif
+
+/* Enabling the token table. */
+#ifndef YYTOKEN_TABLE
+# define YYTOKEN_TABLE 0
+#endif
+
+
+/* Tokens. */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+ /* Put the tokens into the symbol table, so that GDB and other debuggers
+ know about them. */
+ enum yytokentype {
+ END_OF_INPUT = 0,
+ keyword_class = 258,
+ keyword_module = 259,
+ keyword_def = 260,
+ keyword_undef = 261,
+ keyword_begin = 262,
+ keyword_rescue = 263,
+ keyword_ensure = 264,
+ keyword_end = 265,
+ keyword_if = 266,
+ keyword_unless = 267,
+ keyword_then = 268,
+ keyword_elsif = 269,
+ keyword_else = 270,
+ keyword_case = 271,
+ keyword_when = 272,
+ keyword_while = 273,
+ keyword_until = 274,
+ keyword_for = 275,
+ keyword_break = 276,
+ keyword_next = 277,
+ keyword_redo = 278,
+ keyword_retry = 279,
+ keyword_in = 280,
+ keyword_do = 281,
+ keyword_do_cond = 282,
+ keyword_do_block = 283,
+ keyword_do_LAMBDA = 284,
+ keyword_return = 285,
+ keyword_yield = 286,
+ keyword_super = 287,
+ keyword_self = 288,
+ keyword_nil = 289,
+ keyword_true = 290,
+ keyword_false = 291,
+ keyword_and = 292,
+ keyword_or = 293,
+ keyword_not = 294,
+ modifier_if = 295,
+ modifier_unless = 296,
+ modifier_while = 297,
+ modifier_until = 298,
+ modifier_rescue = 299,
+ keyword_alias = 300,
+ keyword_defined = 301,
+ keyword_BEGIN = 302,
+ keyword_END = 303,
+ keyword__LINE__ = 304,
+ keyword__FILE__ = 305,
+ keyword__ENCODING__ = 306,
+ tIDENTIFIER = 307,
+ tFID = 308,
+ tGVAR = 309,
+ tIVAR = 310,
+ tCONSTANT = 311,
+ tCVAR = 312,
+ tLABEL = 313,
+ tINTEGER = 314,
+ tFLOAT = 315,
+ tRATIONAL = 316,
+ tIMAGINARY = 317,
+ tSTRING_CONTENT = 318,
+ tCHAR = 319,
+ tNTH_REF = 320,
+ tBACK_REF = 321,
+ tREGEXP_END = 322,
+ tUPLUS = 130,
+ tUMINUS = 131,
+ tPOW = 132,
+ tCMP = 134,
+ tEQ = 139,
+ tEQQ = 140,
+ tNEQ = 141,
+ tGEQ = 138,
+ tLEQ = 137,
+ tANDOP = 148,
+ tOROP = 149,
+ tMATCH = 142,
+ tNMATCH = 143,
+ tDOT2 = 128,
+ tDOT3 = 129,
+ tAREF = 144,
+ tASET = 145,
+ tLSHFT = 135,
+ tRSHFT = 136,
+ tCOLON2 = 323,
+ tCOLON3 = 324,
+ tOP_ASGN = 325,
+ tASSOC = 326,
+ tLPAREN = 327,
+ tLPAREN_ARG = 328,
+ tRPAREN = 329,
+ tLBRACK = 330,
+ tLBRACE = 331,
+ tLBRACE_ARG = 332,
+ tSTAR = 333,
+ tDSTAR = 334,
+ tAMPER = 335,
+ tLAMBDA = 336,
+ tSYMBEG = 337,
+ tSTRING_BEG = 338,
+ tXSTRING_BEG = 339,
+ tREGEXP_BEG = 340,
+ tWORDS_BEG = 341,
+ tQWORDS_BEG = 342,
+ tSYMBOLS_BEG = 343,
+ tQSYMBOLS_BEG = 344,
+ tSTRING_DBEG = 345,
+ tSTRING_DEND = 346,
+ tSTRING_DVAR = 347,
+ tSTRING_END = 348,
+ tLAMBEG = 349,
+ tLABEL_END = 350,
+ tLOWEST = 351,
+ tUMINUS_NUM = 352,
+ tLAST_TOKEN = 353
+ };
+#endif
+
+
+
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+typedef union YYSTYPE
+{
+
+/* Line 293 of yacc.c */
+#line 737 "parse.y"
+
+ VALUE val;
+ NODE *node;
+ ID id;
+ int num;
+ const struct vtable *vars;
+
+
+
+/* Line 293 of yacc.c */
+#line 957 "parse.c"
+} YYSTYPE;
+# define YYSTYPE_IS_TRIVIAL 1
+# define yystype YYSTYPE /* obsolescent; will be withdrawn */
+# define YYSTYPE_IS_DECLARED 1
+#endif
+
+
+/* Copy the second part of user declarations. */
+
+
+/* Line 343 of yacc.c */
+#line 969 "parse.c"
+
+#ifdef short
+# undef short
+#endif
+
+#ifdef YYTYPE_UINT8
+typedef YYTYPE_UINT8 yytype_uint8;
+#else
+typedef unsigned char yytype_uint8;
+#endif
+
+#ifdef YYTYPE_INT8
+typedef YYTYPE_INT8 yytype_int8;
+#elif (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+typedef signed char yytype_int8;
+#else
+typedef short int yytype_int8;
+#endif
+
+#ifdef YYTYPE_UINT16
+typedef YYTYPE_UINT16 yytype_uint16;
+#else
+typedef unsigned short int yytype_uint16;
+#endif
+
+#ifdef YYTYPE_INT16
+typedef YYTYPE_INT16 yytype_int16;
+#else
+typedef short int yytype_int16;
+#endif
+
+#ifndef YYSIZE_T
+# ifdef __SIZE_TYPE__
+# define YYSIZE_T __SIZE_TYPE__
+# elif defined size_t
+# define YYSIZE_T size_t
+# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
+# define YYSIZE_T size_t
+# else
+# define YYSIZE_T unsigned int
+# endif
+#endif
+
+#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
+
+#ifndef YY_
+# if defined YYENABLE_NLS && YYENABLE_NLS
+# if ENABLE_NLS
+# include <libintl.h> /* INFRINGES ON USER NAME SPACE */
+# define YY_(msgid) dgettext ("bison-runtime", msgid)
+# endif
+# endif
+# ifndef YY_
+# define YY_(msgid) msgid
+# endif
+#endif
+
+/* Suppress unused-variable warnings by "using" E. */
+#if ! defined lint || defined __GNUC__
+# define YYUSE(e) ((void) (e))
+#else
+# define YYUSE(e) /* empty */
+#endif
+
+/* Identity function, used to suppress warnings about constant conditions. */
+#ifndef lint
+# define YYID(n) (n)
+#else
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static int
+YYID (int yyi)
+#else
+static int
+YYID (yyi)
+ int yyi;
+#endif
+{
+ return yyi;
+}
+#endif
+
+#if ! defined yyoverflow || YYERROR_VERBOSE
+
+/* The parser invokes alloca or malloc; define the necessary symbols. */
+
+# ifdef YYSTACK_USE_ALLOCA
+# if YYSTACK_USE_ALLOCA
+# ifdef __GNUC__
+# define YYSTACK_ALLOC __builtin_alloca
+# elif defined __BUILTIN_VA_ARG_INCR
+# include <alloca.h> /* INFRINGES ON USER NAME SPACE */
+# elif defined _AIX
+# define YYSTACK_ALLOC __alloca
+# elif defined _MSC_VER
+# include <malloc.h> /* INFRINGES ON USER NAME SPACE */
+# define alloca _alloca
+# else
+# define YYSTACK_ALLOC alloca
+# if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+# ifndef EXIT_SUCCESS
+# define EXIT_SUCCESS 0
+# endif
+# endif
+# endif
+# endif
+# endif
+
+# ifdef YYSTACK_ALLOC
+ /* Pacify GCC's `empty if-body' warning. */
+# define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
+# ifndef YYSTACK_ALLOC_MAXIMUM
+ /* The OS might guarantee only one guard page at the bottom of the stack,
+ and a page size can be as small as 4096 bytes. So we cannot safely
+ invoke alloca (N) if N exceeds 4096. Use a slightly smaller number
+ to allow for a few compiler-allocated temporary stack slots. */
+# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
+# endif
+# else
+# define YYSTACK_ALLOC YYMALLOC
+# define YYSTACK_FREE YYFREE
+# ifndef YYSTACK_ALLOC_MAXIMUM
+# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
+# endif
+# if (defined __cplusplus && ! defined EXIT_SUCCESS \
+ && ! ((defined YYMALLOC || defined malloc) \
+ && (defined YYFREE || defined free)))
+# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+# ifndef EXIT_SUCCESS
+# define EXIT_SUCCESS 0
+# endif
+# endif
+# ifndef YYMALLOC
+# define YYMALLOC malloc
+# if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
+# endif
+# endif
+# ifndef YYFREE
+# define YYFREE free
+# if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+void free (void *); /* INFRINGES ON USER NAME SPACE */
+# endif
+# endif
+# endif
+#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
+
+
+#if (! defined yyoverflow \
+ && (! defined __cplusplus \
+ || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
+
+/* A type that is properly aligned for any stack member. */
+union yyalloc
+{
+ yytype_int16 yyss_alloc;
+ YYSTYPE yyvs_alloc;
+};
+
+/* The size of the maximum gap between one aligned stack and the next. */
+# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
+
+/* The size of an array large to enough to hold all stacks, each with
+ N elements. */
+# define YYSTACK_BYTES(N) \
+ ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
+ + YYSTACK_GAP_MAXIMUM)
+
+# define YYCOPY_NEEDED 1
+
+/* Relocate STACK from its old location to the new one. The
+ local variables YYSIZE and YYSTACKSIZE give the old and new number of
+ elements in the stack, and YYPTR gives the new location of the
+ stack. Advance YYPTR to a properly aligned location for the next
+ stack. */
+# define YYSTACK_RELOCATE(Stack_alloc, Stack) \
+ do \
+ { \
+ YYSIZE_T yynewbytes; \
+ YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \
+ Stack = &yyptr->Stack_alloc; \
+ yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
+ yyptr += yynewbytes / sizeof (*yyptr); \
+ } \
+ while (YYID (0))
+
+#endif
+
+#if defined YYCOPY_NEEDED && YYCOPY_NEEDED
+/* Copy COUNT objects from FROM to TO. The source and destination do
+ not overlap. */
+# ifndef YYCOPY
+# if defined __GNUC__ && 1 < __GNUC__
+# define YYCOPY(To, From, Count) \
+ __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
+# else
+# define YYCOPY(To, From, Count) \
+ do \
+ { \
+ YYSIZE_T yyi; \
+ for (yyi = 0; yyi < (Count); yyi++) \
+ (To)[yyi] = (From)[yyi]; \
+ } \
+ while (YYID (0))
+# endif
+# endif
+#endif /* !YYCOPY_NEEDED */
+
+/* YYFINAL -- State number of the termination state. */
+#define YYFINAL 3
+/* YYLAST -- Last index in YYTABLE. */
+#define YYLAST 11005
+
+/* YYNTOKENS -- Number of terminals. */
+#define YYNTOKENS 145
+/* YYNNTS -- Number of nonterminals. */
+#define YYNNTS 208
+/* YYNRULES -- Number of rules. */
+#define YYNRULES 632
+/* YYNRULES -- Number of states. */
+#define YYNSTATES 1068
+
+/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
+#define YYUNDEFTOK 2
+#define YYMAXUTOK 353
+
+#define YYTRANSLATE(YYX) \
+ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
+
+/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
+static const yytype_uint8 yytranslate[] =
+{
+ 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 144, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 143, 130, 2, 2, 2, 128, 123, 2,
+ 139, 140, 126, 124, 137, 125, 136, 127, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 118, 142,
+ 120, 116, 119, 117, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 135, 2, 141, 122, 2, 138, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 133, 121, 134, 131, 2, 81, 82,
+ 68, 69, 70, 2, 71, 85, 86, 76, 75, 72,
+ 73, 74, 79, 80, 83, 84, 2, 2, 77, 78,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
+ 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
+ 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
+ 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
+ 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
+ 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
+ 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
+ 65, 66, 67, 87, 88, 89, 90, 91, 92, 93,
+ 94, 95, 96, 97, 98, 99, 100, 101, 102, 103,
+ 104, 105, 106, 107, 108, 109, 110, 111, 112, 113,
+ 114, 115, 129, 132
+};
+
+#if YYDEBUG
+/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
+ YYRHS. */
+static const yytype_uint16 yyprhs[] =
+{
+ 0, 0, 3, 4, 7, 10, 12, 14, 18, 21,
+ 23, 24, 30, 35, 38, 40, 42, 46, 49, 51,
+ 52, 58, 59, 64, 68, 72, 76, 79, 83, 87,
+ 91, 95, 99, 104, 106, 110, 114, 121, 127, 133,
+ 139, 145, 149, 153, 157, 159, 163, 167, 169, 173,
+ 177, 181, 184, 186, 188, 190, 192, 194, 199, 200,
+ 206, 208, 211, 215, 220, 226, 231, 237, 240, 243,
+ 246, 249, 252, 254, 258, 260, 264, 266, 269, 273,
+ 279, 282, 287, 290, 295, 297, 301, 303, 307, 310,
+ 314, 316, 320, 322, 324, 329, 333, 337, 341, 345,
+ 348, 350, 352, 354, 359, 363, 367, 371, 375, 378,
+ 380, 382, 384, 387, 389, 393, 395, 397, 399, 401,
+ 403, 405, 407, 409, 411, 413, 414, 419, 421, 423,
+ 425, 427, 429, 431, 433, 435, 437, 439, 441, 443,
+ 445, 447, 449, 451, 453, 455, 457, 459, 461, 463,
+ 465, 467, 469, 471, 473, 475, 477, 479, 481, 483,
+ 485, 487, 489, 491, 493, 495, 497, 499, 501, 503,
+ 505, 507, 509, 511, 513, 515, 517, 519, 521, 523,
+ 525, 527, 529, 531, 533, 535, 537, 539, 541, 543,
+ 545, 547, 549, 551, 553, 555, 557, 559, 561, 565,
+ 571, 575, 581, 588, 594, 600, 606, 612, 617, 621,
+ 625, 629, 633, 637, 641, 645, 649, 653, 658, 661,
+ 664, 668, 672, 676, 680, 684, 688, 692, 696, 700,
+ 704, 708, 712, 716, 719, 722, 726, 730, 734, 738,
+ 739, 744, 745, 746, 755, 757, 759, 761, 764, 769,
+ 772, 776, 778, 780, 782, 784, 787, 792, 795, 797,
+ 800, 803, 808, 810, 811, 814, 817, 820, 822, 824,
+ 827, 831, 836, 838, 840, 844, 849, 852, 854, 856,
+ 858, 860, 862, 864, 866, 868, 870, 872, 874, 875,
+ 880, 881, 885, 886, 887, 893, 897, 901, 904, 908,
+ 912, 914, 919, 923, 925, 926, 933, 938, 942, 945,
+ 947, 950, 953, 960, 967, 968, 969, 977, 978, 979,
+ 987, 993, 998, 999, 1000, 1010, 1011, 1018, 1019, 1020,
+ 1029, 1030, 1036, 1037, 1044, 1045, 1046, 1056, 1058, 1060,
+ 1062, 1064, 1066, 1068, 1070, 1072, 1074, 1076, 1078, 1080,
+ 1082, 1084, 1086, 1088, 1090, 1092, 1095, 1097, 1099, 1101,
+ 1107, 1109, 1112, 1114, 1116, 1118, 1122, 1124, 1128, 1130,
+ 1135, 1142, 1146, 1152, 1155, 1160, 1162, 1166, 1171, 1174,
+ 1177, 1179, 1182, 1183, 1190, 1199, 1204, 1211, 1216, 1219,
+ 1226, 1229, 1234, 1241, 1244, 1249, 1252, 1257, 1259, 1261,
+ 1263, 1267, 1269, 1274, 1276, 1281, 1283, 1287, 1289, 1291,
+ 1292, 1293, 1294, 1295, 1302, 1307, 1309, 1313, 1317, 1318,
+ 1324, 1327, 1332, 1338, 1344, 1347, 1348, 1354, 1355, 1361,
+ 1365, 1366, 1371, 1372, 1377, 1380, 1382, 1387, 1388, 1394,
+ 1395, 1401, 1407, 1409, 1411, 1418, 1420, 1422, 1424, 1426,
+ 1429, 1431, 1434, 1436, 1438, 1440, 1442, 1444, 1446, 1448,
+ 1451, 1455, 1459, 1463, 1467, 1471, 1472, 1476, 1478, 1481,
+ 1485, 1489, 1490, 1494, 1498, 1502, 1506, 1510, 1511, 1515,
+ 1516, 1520, 1521, 1524, 1525, 1528, 1529, 1532, 1534, 1535,
+ 1539, 1540, 1541, 1542, 1543, 1551, 1553, 1555, 1557, 1559,
+ 1562, 1564, 1566, 1568, 1570, 1574, 1576, 1579, 1581, 1583,
+ 1585, 1587, 1589, 1591, 1593, 1595, 1597, 1599, 1601, 1603,
+ 1605, 1607, 1609, 1611, 1613, 1615, 1617, 1619, 1621, 1623,
+ 1625, 1626, 1631, 1634, 1638, 1639, 1643, 1648, 1651, 1654,
+ 1656, 1659, 1660, 1667, 1676, 1681, 1688, 1693, 1700, 1703,
+ 1708, 1715, 1718, 1723, 1726, 1731, 1733, 1734, 1736, 1738,
+ 1740, 1742, 1744, 1746, 1748, 1750, 1754, 1756, 1760, 1762,
+ 1765, 1767, 1770, 1772, 1774, 1778, 1780, 1784, 1786, 1788,
+ 1791, 1793, 1797, 1801, 1803, 1807, 1809, 1813, 1815, 1817,
+ 1820, 1822, 1824, 1826, 1829, 1832, 1834, 1836, 1837, 1842,
+ 1844, 1847, 1849, 1853, 1857, 1860, 1865, 1868, 1870, 1872,
+ 1874, 1876, 1878, 1880, 1882, 1884, 1886, 1888, 1890, 1892,
+ 1893, 1895, 1896, 1898, 1901, 1904, 1905, 1907, 1909, 1911,
+ 1913, 1915, 1918
+};
+
+/* YYRHS -- A `-1'-separated list of the rules' RHS. */
+static const yytype_int16 yyrhs[] =
+{
+ 146, 0, -1, -1, 147, 148, -1, 149, 345, -1,
+ 352, -1, 150, -1, 149, 351, 150, -1, 1, 150,
+ -1, 157, -1, -1, 47, 151, 133, 148, 134, -1,
+ 153, 269, 236, 272, -1, 154, 345, -1, 352, -1,
+ 155, -1, 154, 351, 155, -1, 1, 157, -1, 157,
+ -1, -1, 47, 156, 133, 148, 134, -1, -1, 45,
+ 180, 158, 180, -1, 45, 54, 54, -1, 45, 54,
+ 66, -1, 45, 54, 65, -1, 6, 181, -1, 157,
+ 40, 161, -1, 157, 41, 161, -1, 157, 42, 161,
+ -1, 157, 43, 161, -1, 157, 44, 157, -1, 48,
+ 133, 153, 134, -1, 159, -1, 168, 116, 162, -1,
+ 306, 89, 162, -1, 221, 135, 193, 348, 89, 162,
+ -1, 221, 136, 52, 89, 162, -1, 221, 136, 56,
+ 89, 162, -1, 221, 87, 56, 89, 162, -1, 221,
+ 87, 52, 89, 162, -1, 307, 89, 162, -1, 175,
+ 116, 201, -1, 168, 116, 200, -1, 160, -1, 175,
+ 116, 162, -1, 175, 116, 159, -1, 162, -1, 160,
+ 37, 160, -1, 160, 38, 160, -1, 39, 346, 160,
+ -1, 130, 162, -1, 185, -1, 160, -1, 167, -1,
+ 163, -1, 258, -1, 258, 344, 342, 195, -1, -1,
+ 96, 165, 244, 153, 134, -1, 341, -1, 166, 195,
+ -1, 166, 195, 164, -1, 221, 136, 342, 195, -1,
+ 221, 136, 342, 195, 164, -1, 221, 87, 342, 195,
+ -1, 221, 87, 342, 195, 164, -1, 32, 195, -1,
+ 31, 195, -1, 30, 194, -1, 21, 194, -1, 22,
+ 194, -1, 170, -1, 91, 169, 347, -1, 170, -1,
+ 91, 169, 347, -1, 172, -1, 172, 171, -1, 172,
+ 97, 174, -1, 172, 97, 174, 137, 173, -1, 172,
+ 97, -1, 172, 97, 137, 173, -1, 97, 174, -1,
+ 97, 174, 137, 173, -1, 97, -1, 97, 137, 173,
+ -1, 174, -1, 91, 169, 347, -1, 171, 137, -1,
+ 172, 171, 137, -1, 171, -1, 173, 137, 171, -1,
+ 303, -1, 304, -1, 221, 135, 193, 348, -1, 221,
+ 136, 52, -1, 221, 87, 52, -1, 221, 136, 56,
+ -1, 221, 87, 56, -1, 88, 56, -1, 307, -1,
+ 303, -1, 304, -1, 221, 135, 193, 348, -1, 221,
+ 136, 52, -1, 221, 87, 52, -1, 221, 136, 56,
+ -1, 221, 87, 56, -1, 88, 56, -1, 307, -1,
+ 52, -1, 56, -1, 88, 176, -1, 176, -1, 221,
+ 87, 176, -1, 52, -1, 56, -1, 53, -1, 183,
+ -1, 184, -1, 178, -1, 298, -1, 179, -1, 300,
+ -1, 180, -1, -1, 181, 137, 182, 180, -1, 121,
+ -1, 122, -1, 123, -1, 71, -1, 72, -1, 73,
+ -1, 79, -1, 80, -1, 119, -1, 75, -1, 120,
+ -1, 76, -1, 74, -1, 85, -1, 86, -1, 124,
+ -1, 125, -1, 126, -1, 97, -1, 127, -1, 128,
+ -1, 70, -1, 98, -1, 130, -1, 131, -1, 68,
+ -1, 69, -1, 83, -1, 84, -1, 138, -1, 49,
+ -1, 50, -1, 51, -1, 47, -1, 48, -1, 45,
+ -1, 37, -1, 7, -1, 21, -1, 16, -1, 3,
+ -1, 5, -1, 46, -1, 26, -1, 15, -1, 14,
+ -1, 10, -1, 9, -1, 36, -1, 20, -1, 25,
+ -1, 4, -1, 22, -1, 34, -1, 39, -1, 38,
+ -1, 23, -1, 8, -1, 24, -1, 30, -1, 33,
+ -1, 32, -1, 13, -1, 35, -1, 6, -1, 17,
+ -1, 31, -1, 11, -1, 12, -1, 18, -1, 19,
+ -1, 175, 116, 185, -1, 175, 116, 185, 44, 185,
+ -1, 306, 89, 185, -1, 306, 89, 185, 44, 185,
+ -1, 221, 135, 193, 348, 89, 185, -1, 221, 136,
+ 52, 89, 185, -1, 221, 136, 56, 89, 185, -1,
+ 221, 87, 52, 89, 185, -1, 221, 87, 56, 89,
+ 185, -1, 88, 56, 89, 185, -1, 307, 89, 185,
+ -1, 185, 81, 185, -1, 185, 82, 185, -1, 185,
+ 124, 185, -1, 185, 125, 185, -1, 185, 126, 185,
+ -1, 185, 127, 185, -1, 185, 128, 185, -1, 185,
+ 70, 185, -1, 129, 302, 70, 185, -1, 68, 185,
+ -1, 69, 185, -1, 185, 121, 185, -1, 185, 122,
+ 185, -1, 185, 123, 185, -1, 185, 71, 185, -1,
+ 185, 119, 185, -1, 185, 75, 185, -1, 185, 120,
+ 185, -1, 185, 76, 185, -1, 185, 72, 185, -1,
+ 185, 73, 185, -1, 185, 74, 185, -1, 185, 79,
+ 185, -1, 185, 80, 185, -1, 130, 185, -1, 131,
+ 185, -1, 185, 85, 185, -1, 185, 86, 185, -1,
+ 185, 77, 185, -1, 185, 78, 185, -1, -1, 46,
+ 346, 186, 185, -1, -1, -1, 185, 117, 187, 185,
+ 346, 118, 188, 185, -1, 202, -1, 185, -1, 352,
+ -1, 199, 349, -1, 199, 137, 339, 349, -1, 339,
+ 349, -1, 139, 193, 347, -1, 352, -1, 191, -1,
+ 352, -1, 194, -1, 199, 137, -1, 199, 137, 339,
+ 137, -1, 339, 137, -1, 167, -1, 199, 198, -1,
+ 339, 198, -1, 199, 137, 339, 198, -1, 197, -1,
+ -1, 196, 194, -1, 99, 189, -1, 137, 197, -1,
+ 352, -1, 189, -1, 97, 189, -1, 199, 137, 189,
+ -1, 199, 137, 97, 189, -1, 201, -1, 189, -1,
+ 199, 137, 189, -1, 199, 137, 97, 189, -1, 97,
+ 189, -1, 273, -1, 274, -1, 277, -1, 278, -1,
+ 279, -1, 284, -1, 282, -1, 285, -1, 305, -1,
+ 307, -1, 53, -1, -1, 222, 203, 152, 232, -1,
+ -1, 92, 204, 347, -1, -1, -1, 92, 205, 160,
+ 206, 347, -1, 91, 153, 140, -1, 221, 87, 56,
+ -1, 88, 56, -1, 94, 190, 141, -1, 95, 338,
+ 134, -1, 30, -1, 31, 139, 194, 347, -1, 31,
+ 139, 347, -1, 31, -1, -1, 46, 346, 139, 207,
+ 160, 347, -1, 39, 139, 160, 347, -1, 39, 139,
+ 347, -1, 166, 264, -1, 259, -1, 259, 264, -1,
+ 100, 249, -1, 223, 161, 233, 153, 235, 232, -1,
+ 224, 161, 233, 153, 236, 232, -1, -1, -1, 225,
+ 208, 161, 234, 209, 153, 232, -1, -1, -1, 226,
+ 210, 161, 234, 211, 153, 232, -1, 227, 161, 345,
+ 267, 232, -1, 227, 345, 267, 232, -1, -1, -1,
+ 228, 237, 25, 212, 161, 234, 213, 153, 232, -1,
+ -1, 229, 177, 308, 214, 152, 232, -1, -1, -1,
+ 229, 85, 160, 215, 350, 216, 152, 232, -1, -1,
+ 230, 177, 217, 152, 232, -1, -1, 231, 178, 218,
+ 310, 152, 232, -1, -1, -1, 231, 336, 344, 219,
+ 178, 220, 310, 152, 232, -1, 21, -1, 22, -1,
+ 23, -1, 24, -1, 202, -1, 7, -1, 11, -1,
+ 12, -1, 18, -1, 19, -1, 16, -1, 20, -1,
+ 3, -1, 4, -1, 5, -1, 10, -1, 350, -1,
+ 13, -1, 350, 13, -1, 350, -1, 27, -1, 236,
+ -1, 14, 161, 233, 153, 235, -1, 352, -1, 15,
+ 153, -1, 175, -1, 168, -1, 316, -1, 91, 240,
+ 347, -1, 238, -1, 239, 137, 238, -1, 239, -1,
+ 239, 137, 97, 316, -1, 239, 137, 97, 316, 137,
+ 239, -1, 239, 137, 97, -1, 239, 137, 97, 137,
+ 239, -1, 97, 316, -1, 97, 316, 137, 239, -1,
+ 97, -1, 97, 137, 239, -1, 323, 137, 326, 335,
+ -1, 323, 335, -1, 326, 335, -1, 334, -1, 137,
+ 241, -1, -1, 319, 137, 329, 137, 332, 242, -1,
+ 319, 137, 329, 137, 332, 137, 319, 242, -1, 319,
+ 137, 329, 242, -1, 319, 137, 329, 137, 319, 242,
+ -1, 319, 137, 332, 242, -1, 319, 137, -1, 319,
+ 137, 332, 137, 319, 242, -1, 319, 242, -1, 329,
+ 137, 332, 242, -1, 329, 137, 332, 137, 319, 242,
+ -1, 329, 242, -1, 329, 137, 319, 242, -1, 332,
+ 242, -1, 332, 137, 319, 242, -1, 241, -1, 352,
+ -1, 245, -1, 121, 246, 121, -1, 78, -1, 121,
+ 243, 246, 121, -1, 346, -1, 346, 142, 247, 346,
+ -1, 248, -1, 247, 137, 248, -1, 52, -1, 315,
+ -1, -1, -1, -1, -1, 250, 251, 254, 252, 253,
+ 255, -1, 139, 314, 246, 140, -1, 314, -1, 113,
+ 153, 134, -1, 29, 153, 10, -1, -1, 28, 257,
+ 244, 153, 10, -1, 167, 256, -1, 258, 344, 342,
+ 192, -1, 258, 344, 342, 192, 264, -1, 258, 344,
+ 342, 195, 256, -1, 166, 191, -1, -1, 221, 136,
+ 342, 260, 192, -1, -1, 221, 87, 342, 261, 191,
+ -1, 221, 87, 343, -1, -1, 221, 136, 262, 191,
+ -1, -1, 221, 87, 263, 191, -1, 32, 191, -1,
+ 32, -1, 221, 135, 193, 348, -1, -1, 133, 265,
+ 244, 153, 134, -1, -1, 26, 266, 244, 153, 10,
+ -1, 17, 199, 233, 153, 268, -1, 236, -1, 267,
+ -1, 8, 270, 271, 233, 153, 269, -1, 352, -1,
+ 189, -1, 201, -1, 352, -1, 90, 175, -1, 352,
+ -1, 9, 153, -1, 352, -1, 301, -1, 298, -1,
+ 300, -1, 275, -1, 64, -1, 276, -1, 275, 276,
+ -1, 102, 288, 112, -1, 103, 289, 112, -1, 104,
+ 290, 67, -1, 105, 143, 112, -1, 105, 280, 112,
+ -1, -1, 280, 281, 143, -1, 291, -1, 281, 291,
+ -1, 107, 143, 112, -1, 107, 283, 112, -1, -1,
+ 283, 281, 143, -1, 106, 143, 112, -1, 106, 286,
+ 112, -1, 108, 143, 112, -1, 108, 287, 112, -1,
+ -1, 286, 63, 143, -1, -1, 287, 63, 143, -1,
+ -1, 288, 291, -1, -1, 289, 291, -1, -1, 290,
+ 291, -1, 63, -1, -1, 111, 292, 297, -1, -1,
+ -1, -1, -1, 109, 293, 294, 295, 296, 153, 110,
+ -1, 54, -1, 55, -1, 57, -1, 307, -1, 101,
+ 299, -1, 178, -1, 55, -1, 54, -1, 57, -1,
+ 101, 289, 112, -1, 302, -1, 129, 302, -1, 59,
+ -1, 60, -1, 61, -1, 62, -1, 52, -1, 55,
+ -1, 54, -1, 56, -1, 57, -1, 34, -1, 33,
+ -1, 35, -1, 36, -1, 50, -1, 49, -1, 51,
+ -1, 303, -1, 304, -1, 303, -1, 304, -1, 65,
+ -1, 66, -1, 350, -1, -1, 120, 309, 161, 350,
+ -1, 1, 350, -1, 139, 314, 347, -1, -1, 311,
+ 314, 350, -1, 324, 137, 326, 335, -1, 324, 335,
+ -1, 326, 335, -1, 334, -1, 137, 312, -1, -1,
+ 319, 137, 330, 137, 332, 313, -1, 319, 137, 330,
+ 137, 332, 137, 319, 313, -1, 319, 137, 330, 313,
+ -1, 319, 137, 330, 137, 319, 313, -1, 319, 137,
+ 332, 313, -1, 319, 137, 332, 137, 319, 313, -1,
+ 319, 313, -1, 330, 137, 332, 313, -1, 330, 137,
+ 332, 137, 319, 313, -1, 330, 313, -1, 330, 137,
+ 319, 313, -1, 332, 313, -1, 332, 137, 319, 313,
+ -1, 312, -1, -1, 56, -1, 55, -1, 54, -1,
+ 57, -1, 315, -1, 52, -1, 316, -1, 317, -1,
+ 91, 240, 347, -1, 318, -1, 319, 137, 318, -1,
+ 58, -1, 320, 189, -1, 320, -1, 320, 221, -1,
+ 320, -1, 322, -1, 323, 137, 322, -1, 321, -1,
+ 324, 137, 321, -1, 70, -1, 98, -1, 325, 52,
+ -1, 325, -1, 317, 116, 189, -1, 317, 116, 221,
+ -1, 328, -1, 329, 137, 328, -1, 327, -1, 330,
+ 137, 327, -1, 126, -1, 97, -1, 331, 52, -1,
+ 331, -1, 123, -1, 99, -1, 333, 52, -1, 137,
+ 334, -1, 352, -1, 305, -1, -1, 139, 337, 160,
+ 347, -1, 352, -1, 339, 349, -1, 340, -1, 339,
+ 137, 340, -1, 189, 90, 189, -1, 58, 189, -1,
+ 102, 288, 114, 189, -1, 98, 189, -1, 52, -1,
+ 56, -1, 53, -1, 52, -1, 56, -1, 53, -1,
+ 183, -1, 52, -1, 53, -1, 183, -1, 136, -1,
+ 87, -1, -1, 351, -1, -1, 144, -1, 346, 140,
+ -1, 346, 141, -1, -1, 144, -1, 137, -1, 142,
+ -1, 144, -1, 350, -1, 351, 142, -1, -1
+};
+
+/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
+static const yytype_uint16 yyrline[] =
+{
+ 0, 901, 901, 901, 932, 943, 952, 960, 968, 974,
+ 976, 975, 996, 1029, 1040, 1049, 1057, 1065, 1071, 1076,
+ 1075, 1096, 1096, 1104, 1112, 1123, 1134, 1142, 1151, 1160,
+ 1173, 1186, 1195, 1207, 1208, 1218, 1223, 1244, 1249, 1254,
+ 1264, 1269, 1280, 1289, 1298, 1301, 1310, 1322, 1323, 1331,
+ 1339, 1347, 1355, 1358, 1370, 1371, 1374, 1375, 1387, 1386,
+ 1408, 1418, 1427, 1440, 1449, 1461, 1470, 1482, 1491, 1500,
+ 1508, 1516, 1526, 1527, 1537, 1538, 1548, 1556, 1564, 1572,
+ 1581, 1589, 1598, 1606, 1615, 1623, 1634, 1635, 1645, 1653,
+ 1663, 1671, 1681, 1685, 1689, 1697, 1705, 1713, 1721, 1735,
+ 1749, 1762, 1771, 1780, 1788, 1796, 1804, 1812, 1826, 1840,
+ 1852, 1861, 1864, 1872, 1880, 1890, 1891, 1892, 1893, 1898,
+ 1909, 1910, 1913, 1921, 1924, 1932, 1932, 1942, 1943, 1944,
+ 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954,
+ 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964,
+ 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1974, 1974, 1974,
+ 1975, 1975, 1976, 1976, 1976, 1977, 1977, 1977, 1977, 1978,
+ 1978, 1978, 1978, 1979, 1979, 1979, 1980, 1980, 1980, 1980,
+ 1981, 1981, 1981, 1981, 1982, 1982, 1982, 1982, 1983, 1983,
+ 1983, 1983, 1984, 1984, 1984, 1984, 1985, 1985, 1988, 1997,
+ 2007, 2012, 2022, 2048, 2053, 2058, 2063, 2073, 2083, 2095,
+ 2109, 2123, 2131, 2139, 2147, 2155, 2163, 2171, 2180, 2188,
+ 2196, 2204, 2212, 2220, 2228, 2236, 2244, 2252, 2260, 2268,
+ 2276, 2284, 2295, 2303, 2311, 2319, 2327, 2335, 2343, 2351,
+ 2351, 2361, 2367, 2360, 2380, 2386, 2398, 2399, 2403, 2411,
+ 2421, 2431, 2432, 2435, 2436, 2437, 2441, 2449, 2459, 2468,
+ 2476, 2486, 2495, 2504, 2504, 2516, 2526, 2530, 2536, 2544,
+ 2552, 2566, 2582, 2583, 2586, 2600, 2615, 2625, 2626, 2627,
+ 2628, 2629, 2630, 2631, 2632, 2633, 2634, 2635, 2644, 2643,
+ 2671, 2671, 2680, 2684, 2679, 2693, 2701, 2709, 2717, 2730,
+ 2738, 2746, 2754, 2762, 2770, 2770, 2779, 2787, 2795, 2805,
+ 2806, 2816, 2820, 2832, 2844, 2844, 2844, 2855, 2855, 2855,
+ 2866, 2877, 2886, 2888, 2885, 2952, 2951, 2973, 2978, 2972,
+ 2997, 2996, 3018, 3017, 3040, 3041, 3040, 3064, 3072, 3080,
+ 3088, 3098, 3110, 3116, 3122, 3128, 3134, 3140, 3146, 3152,
+ 3158, 3164, 3174, 3180, 3185, 3186, 3193, 3198, 3201, 3202,
+ 3215, 3216, 3226, 3227, 3230, 3238, 3248, 3256, 3266, 3274,
+ 3283, 3292, 3300, 3308, 3317, 3329, 3337, 3348, 3352, 3356,
+ 3360, 3366, 3371, 3376, 3380, 3384, 3388, 3392, 3396, 3404,
+ 3408, 3412, 3416, 3420, 3424, 3428, 3432, 3436, 3442, 3443,
+ 3449, 3459, 3468, 3480, 3484, 3494, 3501, 3510, 3518, 3524,
+ 3527, 3532, 3535, 3524, 3554, 3562, 3568, 3572, 3579, 3578,
+ 3599, 3615, 3624, 3636, 3650, 3660, 3659, 3676, 3675, 3691,
+ 3700, 3699, 3717, 3716, 3733, 3741, 3749, 3764, 3763, 3783,
+ 3782, 3803, 3815, 3816, 3819, 3838, 3841, 3849, 3857, 3860,
+ 3864, 3867, 3875, 3878, 3879, 3887, 3890, 3907, 3908, 3909,
+ 3919, 3929, 3956, 4034, 4043, 4054, 4061, 4071, 4079, 4089,
+ 4098, 4109, 4116, 4134, 4143, 4153, 4162, 4173, 4180, 4191,
+ 4198, 4213, 4220, 4231, 4238, 4249, 4256, 4297, 4299, 4298,
+ 4314, 4320, 4324, 4328, 4313, 4348, 4356, 4364, 4372, 4375,
+ 4386, 4387, 4388, 4389, 4392, 4403, 4404, 4415, 4416, 4417,
+ 4418, 4421, 4422, 4423, 4424, 4425, 4428, 4429, 4430, 4431,
+ 4432, 4433, 4434, 4437, 4450, 4460, 4468, 4478, 4479, 4482,
+ 4491, 4490, 4499, 4511, 4521, 4521, 4534, 4538, 4542, 4546,
+ 4552, 4557, 4562, 4566, 4570, 4574, 4578, 4582, 4586, 4590,
+ 4594, 4598, 4602, 4606, 4610, 4614, 4619, 4625, 4635, 4645,
+ 4655, 4667, 4668, 4675, 4684, 4693, 4712, 4719, 4733, 4742,
+ 4752, 4764, 4773, 4784, 4792, 4809, 4817, 4833, 4834, 4837,
+ 4842, 4849, 4861, 4873, 4881, 4897, 4905, 4921, 4922, 4925,
+ 4938, 4949, 4950, 4953, 4970, 4974, 4984, 4994, 4994, 5023,
+ 5024, 5034, 5041, 5065, 5077, 5085, 5093, 5107, 5108, 5109,
+ 5112, 5113, 5114, 5115, 5118, 5119, 5120, 5123, 5128, 5135,
+ 5136, 5139, 5140, 5143, 5146, 5149, 5150, 5151, 5154, 5155,
+ 5158, 5159, 5163
+};
+#endif
+
+#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
+/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
+ First, the terminals, then, starting at YYNTOKENS, nonterminals. */
+static const char *const yytname[] =
+{
+ "\"end-of-input\"", "error", "$undefined", "keyword_class",
+ "keyword_module", "keyword_def", "keyword_undef", "keyword_begin",
+ "keyword_rescue", "keyword_ensure", "keyword_end", "keyword_if",
+ "keyword_unless", "keyword_then", "keyword_elsif", "keyword_else",
+ "keyword_case", "keyword_when", "keyword_while", "keyword_until",
+ "keyword_for", "keyword_break", "keyword_next", "keyword_redo",
+ "keyword_retry", "keyword_in", "keyword_do", "keyword_do_cond",
+ "keyword_do_block", "keyword_do_LAMBDA", "keyword_return",
+ "keyword_yield", "keyword_super", "keyword_self", "keyword_nil",
+ "keyword_true", "keyword_false", "keyword_and", "keyword_or",
+ "keyword_not", "modifier_if", "modifier_unless", "modifier_while",
+ "modifier_until", "modifier_rescue", "keyword_alias", "keyword_defined",
+ "keyword_BEGIN", "keyword_END", "keyword__LINE__", "keyword__FILE__",
+ "keyword__ENCODING__", "tIDENTIFIER", "tFID", "tGVAR", "tIVAR",
+ "tCONSTANT", "tCVAR", "tLABEL", "tINTEGER", "tFLOAT", "tRATIONAL",
+ "tIMAGINARY", "tSTRING_CONTENT", "tCHAR", "tNTH_REF", "tBACK_REF",
+ "tREGEXP_END", "\"unary+\"", "\"unary-\"", "\"**\"", "\"<=>\"", "\"==\"",
+ "\"===\"", "\"!=\"", "\">=\"", "\"<=\"", "\"&&\"", "\"||\"", "\"=~\"",
+ "\"!~\"", "\"..\"", "\"...\"", "\"[]\"", "\"[]=\"", "\"<<\"", "\">>\"",
+ "\"::\"", "\":: at EXPR_BEG\"", "tOP_ASGN", "\"=>\"", "\"(\"",
+ "\"( arg\"", "\")\"", "\"[\"", "\"{\"", "\"{ arg\"", "\"*\"",
+ "\"**arg\"", "\"&\"", "\"->\"", "tSYMBEG", "tSTRING_BEG", "tXSTRING_BEG",
+ "tREGEXP_BEG", "tWORDS_BEG", "tQWORDS_BEG", "tSYMBOLS_BEG",
+ "tQSYMBOLS_BEG", "tSTRING_DBEG", "tSTRING_DEND", "tSTRING_DVAR",
+ "tSTRING_END", "tLAMBEG", "tLABEL_END", "tLOWEST", "'='", "'?'", "':'",
+ "'>'", "'<'", "'|'", "'^'", "'&'", "'+'", "'-'", "'*'", "'/'", "'%'",
+ "tUMINUS_NUM", "'!'", "'~'", "tLAST_TOKEN", "'{'", "'}'", "'['", "'.'",
+ "','", "'`'", "'('", "')'", "']'", "';'", "' '", "'\\n'", "$accept",
+ "program", "$@1", "top_compstmt", "top_stmts", "top_stmt", "$@2",
+ "bodystmt", "compstmt", "stmts", "stmt_or_begin", "$@3", "stmt", "$@4",
+ "command_asgn", "expr", "expr_value", "command_call", "block_command",
+ "cmd_brace_block", "@5", "fcall", "command", "mlhs", "mlhs_inner",
+ "mlhs_basic", "mlhs_item", "mlhs_head", "mlhs_post", "mlhs_node", "lhs",
+ "cname", "cpath", "fname", "fsym", "fitem", "undef_list", "$@6", "op",
+ "reswords", "arg", "$@7", "@8", "$@9", "arg_value", "aref_args",
+ "paren_args", "opt_paren_args", "opt_call_args", "call_args",
+ "command_args", "@10", "block_arg", "opt_block_arg", "args", "mrhs_arg",
+ "mrhs", "primary", "@11", "$@12", "$@13", "$@14", "$@15", "$@16", "$@17",
+ "$@18", "$@19", "$@20", "$@21", "@22", "@23", "@24", "@25", "@26",
+ "$@27", "@28", "primary_value", "k_begin", "k_if", "k_unless", "k_while",
+ "k_until", "k_case", "k_for", "k_class", "k_module", "k_def", "k_end",
+ "then", "do", "if_tail", "opt_else", "for_var", "f_marg", "f_marg_list",
+ "f_margs", "block_args_tail", "opt_block_args_tail", "block_param",
+ "opt_block_param", "block_param_def", "opt_bv_decl", "bv_decls", "bvar",
+ "lambda", "@29", "@30", "@31", "@32", "f_larglist", "lambda_body",
+ "do_block", "@33", "block_call", "method_call", "@34", "@35", "@36",
+ "@37", "brace_block", "@38", "@39", "case_body", "cases", "opt_rescue",
+ "exc_list", "exc_var", "opt_ensure", "literal", "strings", "string",
+ "string1", "xstring", "regexp", "words", "word_list", "word", "symbols",
+ "symbol_list", "qwords", "qsymbols", "qword_list", "qsym_list",
+ "string_contents", "xstring_contents", "regexp_contents",
+ "string_content", "@40", "@41", "@42", "@43", "@44", "string_dvar",
+ "symbol", "sym", "dsym", "numeric", "simple_numeric", "user_variable",
+ "keyword_variable", "var_ref", "var_lhs", "backref", "superclass",
+ "$@45", "f_arglist", "@46", "args_tail", "opt_args_tail", "f_args",
+ "f_bad_arg", "f_norm_arg", "f_arg_asgn", "f_arg_item", "f_arg",
+ "f_label", "f_kw", "f_block_kw", "f_block_kwarg", "f_kwarg",
+ "kwrest_mark", "f_kwrest", "f_opt", "f_block_opt", "f_block_optarg",
+ "f_optarg", "restarg_mark", "f_rest_arg", "blkarg_mark", "f_block_arg",
+ "opt_f_block_arg", "singleton", "$@47", "assoc_list", "assocs", "assoc",
+ "operation", "operation2", "operation3", "dot_or_colon", "opt_terms",
+ "opt_nl", "rparen", "rbracket", "trailer", "term", "terms", "none", 0
+};
+#endif
+
+# ifdef YYPRINT
+/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
+ token YYLEX-NUM. */
+static const yytype_uint16 yytoknum[] =
+{
+ 0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
+ 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
+ 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
+ 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
+ 295, 296, 297, 298, 299, 300, 301, 302, 303, 304,
+ 305, 306, 307, 308, 309, 310, 311, 312, 313, 314,
+ 315, 316, 317, 318, 319, 320, 321, 322, 130, 131,
+ 132, 134, 139, 140, 141, 138, 137, 148, 149, 142,
+ 143, 128, 129, 144, 145, 135, 136, 323, 324, 325,
+ 326, 327, 328, 329, 330, 331, 332, 333, 334, 335,
+ 336, 337, 338, 339, 340, 341, 342, 343, 344, 345,
+ 346, 347, 348, 349, 350, 351, 61, 63, 58, 62,
+ 60, 124, 94, 38, 43, 45, 42, 47, 37, 352,
+ 33, 126, 353, 123, 125, 91, 46, 44, 96, 40,
+ 41, 93, 59, 32, 10
+};
+# endif
+
+/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
+static const yytype_uint16 yyr1[] =
+{
+ 0, 145, 147, 146, 148, 149, 149, 149, 149, 150,
+ 151, 150, 152, 153, 154, 154, 154, 154, 155, 156,
+ 155, 158, 157, 157, 157, 157, 157, 157, 157, 157,
+ 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
+ 157, 157, 157, 157, 157, 159, 159, 160, 160, 160,
+ 160, 160, 160, 161, 162, 162, 163, 163, 165, 164,
+ 166, 167, 167, 167, 167, 167, 167, 167, 167, 167,
+ 167, 167, 168, 168, 169, 169, 170, 170, 170, 170,
+ 170, 170, 170, 170, 170, 170, 171, 171, 172, 172,
+ 173, 173, 174, 174, 174, 174, 174, 174, 174, 174,
+ 174, 175, 175, 175, 175, 175, 175, 175, 175, 175,
+ 176, 176, 177, 177, 177, 178, 178, 178, 178, 178,
+ 179, 179, 180, 180, 181, 182, 181, 183, 183, 183,
+ 183, 183, 183, 183, 183, 183, 183, 183, 183, 183,
+ 183, 183, 183, 183, 183, 183, 183, 183, 183, 183,
+ 183, 183, 183, 183, 183, 183, 183, 184, 184, 184,
+ 184, 184, 184, 184, 184, 184, 184, 184, 184, 184,
+ 184, 184, 184, 184, 184, 184, 184, 184, 184, 184,
+ 184, 184, 184, 184, 184, 184, 184, 184, 184, 184,
+ 184, 184, 184, 184, 184, 184, 184, 184, 185, 185,
+ 185, 185, 185, 185, 185, 185, 185, 185, 185, 185,
+ 185, 185, 185, 185, 185, 185, 185, 185, 185, 185,
+ 185, 185, 185, 185, 185, 185, 185, 185, 185, 185,
+ 185, 185, 185, 185, 185, 185, 185, 185, 185, 186,
+ 185, 187, 188, 185, 185, 189, 190, 190, 190, 190,
+ 191, 192, 192, 193, 193, 193, 193, 193, 194, 194,
+ 194, 194, 194, 196, 195, 197, 198, 198, 199, 199,
+ 199, 199, 200, 200, 201, 201, 201, 202, 202, 202,
+ 202, 202, 202, 202, 202, 202, 202, 202, 203, 202,
+ 204, 202, 205, 206, 202, 202, 202, 202, 202, 202,
+ 202, 202, 202, 202, 207, 202, 202, 202, 202, 202,
+ 202, 202, 202, 202, 208, 209, 202, 210, 211, 202,
+ 202, 202, 212, 213, 202, 214, 202, 215, 216, 202,
+ 217, 202, 218, 202, 219, 220, 202, 202, 202, 202,
+ 202, 221, 222, 223, 224, 225, 226, 227, 228, 229,
+ 230, 231, 232, 233, 233, 233, 234, 234, 235, 235,
+ 236, 236, 237, 237, 238, 238, 239, 239, 240, 240,
+ 240, 240, 240, 240, 240, 240, 240, 241, 241, 241,
+ 241, 242, 242, 243, 243, 243, 243, 243, 243, 243,
+ 243, 243, 243, 243, 243, 243, 243, 243, 244, 244,
+ 245, 245, 245, 246, 246, 247, 247, 248, 248, 250,
+ 251, 252, 253, 249, 254, 254, 255, 255, 257, 256,
+ 258, 258, 258, 258, 259, 260, 259, 261, 259, 259,
+ 262, 259, 263, 259, 259, 259, 259, 265, 264, 266,
+ 264, 267, 268, 268, 269, 269, 270, 270, 270, 271,
+ 271, 272, 272, 273, 273, 273, 274, 275, 275, 275,
+ 276, 277, 278, 279, 279, 280, 280, 281, 281, 282,
+ 282, 283, 283, 284, 284, 285, 285, 286, 286, 287,
+ 287, 288, 288, 289, 289, 290, 290, 291, 292, 291,
+ 293, 294, 295, 296, 291, 297, 297, 297, 297, 298,
+ 299, 299, 299, 299, 300, 301, 301, 302, 302, 302,
+ 302, 303, 303, 303, 303, 303, 304, 304, 304, 304,
+ 304, 304, 304, 305, 305, 306, 306, 307, 307, 308,
+ 309, 308, 308, 310, 311, 310, 312, 312, 312, 312,
+ 313, 313, 314, 314, 314, 314, 314, 314, 314, 314,
+ 314, 314, 314, 314, 314, 314, 314, 315, 315, 315,
+ 315, 316, 316, 317, 318, 318, 319, 319, 320, 321,
+ 321, 322, 322, 323, 323, 324, 324, 325, 325, 326,
+ 326, 327, 328, 329, 329, 330, 330, 331, 331, 332,
+ 332, 333, 333, 334, 335, 335, 336, 337, 336, 338,
+ 338, 339, 339, 340, 340, 340, 340, 341, 341, 341,
+ 342, 342, 342, 342, 343, 343, 343, 344, 344, 345,
+ 345, 346, 346, 347, 348, 349, 349, 349, 350, 350,
+ 351, 351, 352
+};
+
+/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
+static const yytype_uint8 yyr2[] =
+{
+ 0, 2, 0, 2, 2, 1, 1, 3, 2, 1,
+ 0, 5, 4, 2, 1, 1, 3, 2, 1, 0,
+ 5, 0, 4, 3, 3, 3, 2, 3, 3, 3,
+ 3, 3, 4, 1, 3, 3, 6, 5, 5, 5,
+ 5, 3, 3, 3, 1, 3, 3, 1, 3, 3,
+ 3, 2, 1, 1, 1, 1, 1, 4, 0, 5,
+ 1, 2, 3, 4, 5, 4, 5, 2, 2, 2,
+ 2, 2, 1, 3, 1, 3, 1, 2, 3, 5,
+ 2, 4, 2, 4, 1, 3, 1, 3, 2, 3,
+ 1, 3, 1, 1, 4, 3, 3, 3, 3, 2,
+ 1, 1, 1, 4, 3, 3, 3, 3, 2, 1,
+ 1, 1, 2, 1, 3, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 0, 4, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 3, 5,
+ 3, 5, 6, 5, 5, 5, 5, 4, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 4, 2, 2,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 2, 2, 3, 3, 3, 3, 0,
+ 4, 0, 0, 8, 1, 1, 1, 2, 4, 2,
+ 3, 1, 1, 1, 1, 2, 4, 2, 1, 2,
+ 2, 4, 1, 0, 2, 2, 2, 1, 1, 2,
+ 3, 4, 1, 1, 3, 4, 2, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 0, 4,
+ 0, 3, 0, 0, 5, 3, 3, 2, 3, 3,
+ 1, 4, 3, 1, 0, 6, 4, 3, 2, 1,
+ 2, 2, 6, 6, 0, 0, 7, 0, 0, 7,
+ 5, 4, 0, 0, 9, 0, 6, 0, 0, 8,
+ 0, 5, 0, 6, 0, 0, 9, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 2, 1, 1, 1, 5,
+ 1, 2, 1, 1, 1, 3, 1, 3, 1, 4,
+ 6, 3, 5, 2, 4, 1, 3, 4, 2, 2,
+ 1, 2, 0, 6, 8, 4, 6, 4, 2, 6,
+ 2, 4, 6, 2, 4, 2, 4, 1, 1, 1,
+ 3, 1, 4, 1, 4, 1, 3, 1, 1, 0,
+ 0, 0, 0, 6, 4, 1, 3, 3, 0, 5,
+ 2, 4, 5, 5, 2, 0, 5, 0, 5, 3,
+ 0, 4, 0, 4, 2, 1, 4, 0, 5, 0,
+ 5, 5, 1, 1, 6, 1, 1, 1, 1, 2,
+ 1, 2, 1, 1, 1, 1, 1, 1, 1, 2,
+ 3, 3, 3, 3, 3, 0, 3, 1, 2, 3,
+ 3, 0, 3, 3, 3, 3, 3, 0, 3, 0,
+ 3, 0, 2, 0, 2, 0, 2, 1, 0, 3,
+ 0, 0, 0, 0, 7, 1, 1, 1, 1, 2,
+ 1, 1, 1, 1, 3, 1, 2, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 4, 2, 3, 0, 3, 4, 2, 2, 1,
+ 2, 0, 6, 8, 4, 6, 4, 6, 2, 4,
+ 6, 2, 4, 2, 4, 1, 0, 1, 1, 1,
+ 1, 1, 1, 1, 1, 3, 1, 3, 1, 2,
+ 1, 2, 1, 1, 3, 1, 3, 1, 1, 2,
+ 1, 3, 3, 1, 3, 1, 3, 1, 1, 2,
+ 1, 1, 1, 2, 2, 1, 1, 0, 4, 1,
+ 2, 1, 3, 3, 2, 4, 2, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
+ 1, 0, 1, 2, 2, 0, 1, 1, 1, 1,
+ 1, 2, 0
+};
+
+/* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM.
+ Performed when YYTABLE doesn't specify something else to do. Zero
+ means the default is an error. */
+static const yytype_uint16 yydefact[] =
+{
+ 2, 0, 0, 1, 0, 349, 350, 351, 0, 342,
+ 343, 344, 347, 345, 346, 348, 337, 338, 339, 340,
+ 300, 263, 263, 517, 516, 518, 519, 621, 0, 621,
+ 10, 0, 521, 520, 522, 607, 609, 513, 512, 608,
+ 515, 507, 508, 509, 510, 457, 527, 528, 0, 0,
+ 0, 0, 292, 632, 632, 84, 409, 483, 481, 483,
+ 485, 465, 477, 471, 479, 0, 0, 0, 3, 619,
+ 6, 9, 33, 44, 47, 55, 263, 54, 0, 72,
+ 0, 76, 86, 0, 52, 244, 0, 288, 0, 0,
+ 314, 317, 619, 0, 0, 0, 0, 56, 309, 277,
+ 278, 456, 458, 279, 280, 281, 283, 282, 284, 454,
+ 455, 453, 505, 523, 524, 285, 0, 286, 60, 5,
+ 8, 167, 178, 168, 191, 164, 184, 174, 173, 194,
+ 195, 189, 172, 171, 166, 192, 196, 197, 176, 165,
+ 179, 183, 185, 177, 170, 186, 193, 188, 187, 180,
+ 190, 175, 163, 182, 181, 162, 169, 160, 161, 157,
+ 158, 159, 115, 117, 116, 152, 153, 148, 130, 131,
+ 132, 139, 136, 138, 133, 134, 154, 155, 140, 141,
+ 145, 149, 135, 137, 127, 128, 129, 142, 143, 144,
+ 146, 147, 150, 151, 156, 120, 122, 124, 26, 118,
+ 119, 121, 123, 0, 0, 0, 0, 0, 0, 0,
+ 481, 0, 258, 0, 245, 268, 70, 262, 632, 0,
+ 523, 524, 0, 286, 632, 601, 71, 69, 621, 68,
+ 0, 632, 434, 67, 621, 622, 0, 0, 21, 239,
+ 0, 0, 337, 338, 300, 303, 435, 0, 218, 0,
+ 219, 297, 0, 19, 0, 0, 619, 15, 18, 621,
+ 74, 14, 621, 0, 0, 625, 625, 246, 0, 0,
+ 625, 599, 621, 0, 0, 0, 82, 341, 0, 92,
+ 93, 100, 311, 410, 502, 501, 503, 500, 0, 499,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 506, 51, 233, 234, 628, 629, 4, 630, 620,
+ 0, 0, 0, 0, 0, 0, 0, 439, 437, 424,
+ 61, 308, 418, 420, 0, 88, 0, 80, 77, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 241, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 432, 632, 430, 0,
+ 53, 0, 0, 0, 0, 619, 0, 620, 0, 363,
+ 362, 0, 0, 523, 524, 286, 110, 111, 0, 0,
+ 113, 0, 0, 523, 524, 286, 330, 187, 180, 190,
+ 175, 157, 158, 159, 115, 116, 597, 332, 596, 0,
+ 618, 617, 0, 310, 459, 0, 0, 125, 604, 297,
+ 269, 606, 265, 0, 0, 0, 0, 259, 267, 432,
+ 632, 430, 0, 0, 0, 260, 621, 0, 302, 264,
+ 621, 254, 632, 632, 253, 621, 307, 50, 23, 25,
+ 24, 0, 304, 0, 0, 0, 432, 430, 0, 17,
+ 0, 621, 295, 13, 620, 73, 291, 293, 298, 627,
+ 626, 247, 627, 249, 299, 600, 0, 99, 506, 90,
+ 85, 0, 432, 632, 430, 556, 487, 490, 488, 504,
+ 484, 460, 482, 461, 462, 486, 463, 464, 0, 467,
+ 473, 0, 474, 469, 470, 0, 475, 0, 476, 0,
+ 631, 7, 27, 28, 29, 30, 31, 48, 49, 632,
+ 632, 58, 62, 632, 0, 34, 273, 0, 43, 272,
+ 621, 0, 78, 89, 46, 45, 0, 198, 268, 42,
+ 216, 223, 228, 229, 230, 225, 227, 237, 238, 231,
+ 232, 209, 210, 235, 236, 0, 224, 226, 220, 221,
+ 222, 211, 212, 213, 214, 215, 610, 612, 611, 613,
+ 0, 263, 429, 621, 610, 612, 611, 613, 0, 263,
+ 0, 632, 354, 0, 353, 0, 0, 0, 0, 0,
+ 0, 297, 432, 632, 430, 322, 327, 110, 111, 112,
+ 0, 530, 325, 529, 432, 632, 430, 0, 0, 534,
+ 334, 610, 611, 263, 35, 200, 41, 208, 0, 0,
+ 198, 603, 0, 270, 266, 632, 610, 611, 621, 610,
+ 611, 602, 301, 623, 250, 255, 257, 306, 22, 0,
+ 240, 0, 32, 427, 425, 207, 0, 75, 16, 621,
+ 625, 0, 83, 96, 98, 621, 610, 611, 562, 559,
+ 558, 557, 560, 568, 577, 0, 588, 578, 592, 591,
+ 587, 556, 411, 555, 415, 561, 563, 564, 566, 541,
+ 570, 575, 632, 580, 632, 585, 541, 590, 541, 0,
+ 539, 491, 0, 466, 468, 478, 472, 480, 217, 401,
+ 621, 0, 399, 398, 0, 632, 0, 276, 0, 87,
+ 81, 0, 0, 0, 621, 0, 0, 433, 65, 0,
+ 0, 436, 0, 0, 431, 63, 632, 352, 289, 632,
+ 632, 445, 632, 355, 632, 357, 315, 356, 318, 0,
+ 0, 321, 614, 296, 621, 610, 611, 0, 0, 532,
+ 0, 0, 110, 111, 114, 621, 0, 621, 556, 0,
+ 556, 0, 252, 421, 57, 251, 0, 126, 605, 271,
+ 261, 0, 0, 436, 0, 0, 632, 621, 11, 0,
+ 294, 248, 91, 94, 0, 375, 366, 368, 621, 364,
+ 621, 412, 0, 0, 548, 569, 0, 537, 595, 579,
+ 0, 538, 0, 551, 589, 0, 553, 593, 492, 495,
+ 496, 497, 489, 498, 397, 621, 0, 564, 382, 572,
+ 573, 632, 632, 583, 382, 382, 380, 403, 0, 0,
+ 0, 0, 0, 274, 79, 199, 0, 40, 205, 39,
+ 206, 66, 428, 624, 0, 37, 203, 38, 204, 64,
+ 426, 446, 447, 632, 448, 0, 632, 360, 0, 0,
+ 358, 0, 0, 0, 320, 0, 0, 436, 0, 328,
+ 0, 0, 436, 331, 598, 621, 0, 0, 335, 422,
+ 423, 201, 0, 256, 305, 20, 621, 0, 373, 0,
+ 565, 0, 0, 581, 540, 567, 541, 541, 576, 632,
+ 594, 541, 586, 541, 564, 541, 493, 0, 400, 0,
+ 388, 390, 0, 571, 0, 378, 379, 0, 393, 0,
+ 395, 0, 440, 438, 0, 419, 275, 242, 36, 202,
+ 0, 0, 450, 361, 0, 12, 452, 0, 312, 313,
+ 0, 0, 270, 632, 323, 0, 531, 326, 533, 333,
+ 535, 534, 365, 376, 0, 371, 367, 414, 0, 0,
+ 413, 0, 544, 0, 546, 536, 0, 552, 0, 549,
+ 554, 0, 402, 582, 381, 382, 382, 297, 432, 574,
+ 632, 382, 584, 382, 382, 407, 621, 405, 408, 59,
+ 0, 0, 449, 0, 101, 102, 109, 0, 451, 0,
+ 316, 319, 442, 443, 441, 0, 0, 0, 0, 374,
+ 0, 369, 0, 0, 541, 541, 541, 541, 0, 0,
+ 385, 0, 387, 614, 296, 377, 0, 394, 0, 391,
+ 396, 0, 404, 243, 108, 432, 632, 430, 632, 632,
+ 0, 329, 0, 372, 0, 417, 416, 545, 0, 542,
+ 547, 550, 494, 382, 382, 382, 382, 406, 614, 107,
+ 621, 610, 611, 444, 359, 324, 336, 370, 541, 386,
+ 0, 383, 389, 392, 436, 543, 382, 384
+};
+
+/* YYDEFGOTO[NTERM-NUM]. */
+static const yytype_int16 yydefgoto[] =
+{
+ -1, 1, 2, 68, 69, 70, 240, 570, 571, 256,
+ 257, 450, 258, 441, 72, 73, 361, 74, 75, 512,
+ 695, 247, 77, 78, 259, 79, 80, 81, 470, 82,
+ 213, 380, 381, 195, 196, 197, 198, 608, 559, 200,
+ 84, 443, 545, 980, 215, 264, 232, 753, 430, 431,
+ 229, 230, 217, 417, 432, 518, 519, 85, 359, 262,
+ 263, 639, 629, 363, 852, 364, 853, 737, 995, 741,
+ 738, 935, 597, 599, 751, 941, 249, 87, 88, 89,
+ 90, 91, 92, 93, 94, 95, 96, 718, 573, 726,
+ 849, 850, 372, 776, 777, 778, 964, 901, 805, 691,
+ 692, 806, 976, 977, 282, 283, 475, 781, 882, 662,
+ 950, 323, 513, 97, 98, 716, 709, 568, 560, 321,
+ 510, 509, 580, 994, 720, 843, 921, 925, 99, 100,
+ 101, 102, 103, 104, 105, 294, 488, 106, 298, 107,
+ 108, 296, 300, 290, 288, 292, 480, 682, 681, 798,
+ 896, 961, 802, 109, 289, 110, 111, 112, 220, 221,
+ 115, 222, 223, 592, 740, 749, 750, 884, 784, 664,
+ 665, 666, 894, 668, 669, 670, 671, 810, 811, 672,
+ 673, 674, 675, 813, 814, 676, 677, 678, 679, 680,
+ 787, 399, 598, 269, 433, 225, 118, 633, 562, 402,
+ 307, 427, 428, 711, 461, 574, 367, 261
+};
+
+/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+ STATE-NUM. */
+#define YYPACT_NINF -817
+static const yytype_int16 yypact[] =
+{
+ -817, 102, 2542, -817, 7282, -817, -817, -817, 6793, -817,
+ -817, -817, -817, -817, -817, -817, 7398, 7398, -817, -817,
+ 7398, 3893, 3479, -817, -817, -817, -817, 201, 6657, -27,
+ -817, 117, -817, -817, -817, 2789, 3617, -817, -817, 2927,
+ -817, -817, -817, -817, -817, -817, -817, -817, 8790, 8790,
+ 80, 4988, -36, 7746, 8094, 7058, -817, 6521, -817, -817,
+ -817, 21, 41, 63, 92, 813, 8906, 8790, -817, 362,
+ -817, 944, -817, 528, -817, -817, 174, 230, 148, -817,
+ 165, 9138, -817, 210, 2905, 276, 304, -817, 9022, 9022,
+ -817, -817, 5896, 9250, 9362, 9474, 6384, 3, 98, -817,
+ -817, 242, -817, -817, -817, -817, -817, -817, -817, -817,
+ -817, -817, -817, 483, 486, -817, 292, 498, -817, -817,
+ -817, -817, -817, -817, -817, -817, -817, -817, -817, -817,
+ -817, -817, -817, -817, -817, -817, -817, -817, -817, -817,
+ -817, -817, -817, -817, -817, -817, -817, -817, -817, -817,
+ -817, -817, -817, -817, -817, -817, -817, -817, -817, -817,
+ -817, -817, -817, -817, -817, -817, -817, -817, -817, -817,
+ -817, -817, -817, -817, -817, -817, -817, -817, -817, -817,
+ -817, -817, -817, -817, -817, -817, -817, -817, -817, -817,
+ -817, -817, -817, -817, -817, -817, -817, -817, 277, -817,
+ -817, -817, -817, 257, 8790, 361, 5130, 8790, 8790, 8790,
+ -817, 8790, -817, 311, 2905, 342, -817, -817, 329, 448,
+ 45, 220, 386, 245, 343, -817, -817, -817, 5780, -817,
+ 7398, 7398, -817, -817, 6012, -817, 9022, 624, -817, 346,
+ 370, 5272, -817, -817, -817, 379, 395, 174, -817, 456,
+ 455, 567, 7514, -817, 4988, 400, 362, -817, 944, -27,
+ 441, -817, -27, 9022, 429, 28, 312, -817, 342, 446,
+ 312, -817, -27, 523, 813, 9586, 458, -817, 472, 511,
+ 538, 565, -817, -817, -817, -817, -817, -817, 436, -817,
+ 515, 601, 731, 485, 619, 494, 35, 518, 671, 521,
+ 47, 570, -817, -817, -817, -817, -817, -817, -817, 6128,
+ 9022, 9022, 9022, 9022, 7514, 9022, 9022, -817, -817, -817,
+ 547, -817, -817, -817, 8210, -817, 4988, 7170, 524, 8210,
+ 8790, 8790, 8790, 8790, 8790, 8790, 8790, 8790, 8790, 8790,
+ 8790, 8790, 8790, 8790, 8790, -817, 8790, 8790, 8790, 8790,
+ 8790, 8790, 8790, 8790, 8790, 8790, 9872, 7398, 9952, 4330,
+ 528, 81, 81, 9022, 9022, 362, 648, 534, 610, -817,
+ -817, 600, 659, 58, 87, 95, 302, 381, 9022, 445,
+ -817, 69, 638, -817, -817, -817, -817, 31, 44, 55,
+ 149, 194, 259, 272, 300, 316, -817, -817, -817, 3,
+ -817, -817, 10032, -817, -817, 8906, 8906, -817, -817, 263,
+ -817, -817, -817, 548, 8790, 8790, 7630, -817, -817, 10112,
+ 7398, 10192, 8790, 8790, 7862, -817, -27, 546, -817, -817,
+ -27, -817, 582, 589, -817, 119, -817, -817, -817, -817,
+ -817, 6793, -817, 8790, 5406, 573, 10112, 10192, 8790, 944,
+ 607, -27, -817, -817, 6244, 604, -817, 528, -817, 7978,
+ -817, -817, 8094, -817, -817, -817, 346, 667, -817, -817,
+ 605, 9586, 10272, 7398, 10352, 1430, -817, -817, -817, -817,
+ -817, -817, -817, -817, -817, -817, -817, -817, 51, -817,
+ -817, 602, -817, -817, -817, 419, -817, 606, -817, 8790,
+ -817, -817, -817, -817, -817, -817, -817, -817, -817, 50,
+ 50, -817, -817, 50, 8790, -817, 611, 614, -817, -817,
+ -27, 9586, 616, -817, -817, -817, 628, 1893, -817, -817,
+ 455, 2287, 2287, 2287, 2287, 998, 998, 2361, 2097, 2287,
+ 2287, 3043, 3043, 491, 491, 8790, 998, 998, 847, 847,
+ 799, 428, 428, 455, 455, 455, 4031, 3065, 4169, 3203,
+ 395, 621, -817, -27, 586, -817, 711, -817, 395, 3755,
+ 753, 757, -817, 4472, 764, 4756, 170, 170, 648, 8326,
+ 753, 151, 10432, 7398, 10512, -817, 528, -817, 667, -817,
+ 362, -817, -817, -817, 10592, 7398, 10032, 4330, 9022, 627,
+ -817, -817, -817, 4188, -817, 2631, -817, 2905, 6793, 8790,
+ 2767, -817, 8790, 342, -817, 343, 2651, 3341, -27, 308,
+ 358, -817, -817, -817, -817, 7630, 7862, -817, -817, 9022,
+ 2905, 678, -817, -817, -817, 2905, 5406, 219, -817, -27,
+ 312, 9586, 605, 403, 46, -27, 349, 365, -817, -817,
+ -817, -817, -817, -817, -817, 1148, -817, -817, -817, -817,
+ -817, 1521, -817, -817, -817, -817, -817, 690, -817, 680,
+ 8790, -817, 694, 763, 699, -817, 700, 774, 706, 793,
+ -817, -817, 837, -817, -817, -817, -817, -817, 455, -817,
+ 1008, 5548, -817, -817, 5272, 50, 5548, 709, 8442, -817,
+ 605, 9586, 8906, 8790, 10861, 8906, 8906, -817, 547, 395,
+ 710, 733, 8906, 8906, -817, 547, 395, -817, -817, 8558,
+ 832, -817, 595, -817, 832, -817, -817, -817, -817, 753,
+ 73, -817, 64, 130, -27, 154, 161, 9022, 362, -817,
+ 9022, 4330, 403, 46, -817, -27, 753, 119, 1521, 4330,
+ 1521, 6929, -817, 98, 230, -817, 8790, -817, -817, -817,
+ -817, 8790, 8790, 371, 8790, 8790, 713, 119, -817, 718,
+ -817, -817, -817, 334, 1148, 321, -817, 717, -27, -817,
+ -27, -817, 8790, 1521, -817, -817, 414, -817, -817, -817,
+ 2, -817, 1521, -817, -817, 1668, -817, -817, -817, -817,
+ -817, -817, -817, -817, -817, -27, 735, 742, 722, 9698,
+ -817, 723, 699, -817, 729, 730, -817, 726, 867, 744,
+ 5272, 869, 8790, 746, 605, 2905, 770, -817, 2905, -817,
+ 2905, -817, -817, -817, 8906, -817, 2905, -817, 2905, -817,
+ -817, 611, -817, 803, -817, 4872, 888, -817, 9022, 753,
+ -817, 753, 5548, 5548, -817, 8674, 4614, 162, 170, -817,
+ 362, 753, -817, -817, -817, -27, 753, 362, -817, -817,
+ -817, 2905, 8790, 7862, -817, -817, -27, 902, 761, 1194,
+ -817, 765, 70, -817, -817, -817, 769, 773, -817, 699,
+ -817, 777, -817, 779, -817, 777, -817, 786, -817, 9698,
+ 1521, -817, 855, 672, 414, -817, -817, 1521, -817, 1668,
+ -817, 882, -817, -817, 784, -817, 783, -817, -817, 2905,
+ 9810, 81, -817, -817, 5548, -817, -817, 81, -817, -817,
+ 753, 753, -817, 559, -817, 4330, -817, -817, -817, -817,
+ -817, 627, -817, 791, 902, 467, -817, -817, 5548, 5272,
+ -817, 1521, -817, 1668, -817, -817, 1668, -817, 1668, -817,
+ -817, 5664, -817, 672, -817, 798, 804, -817, 10672, -817,
+ 699, 807, -817, 814, 807, -817, 313, -817, -817, -817,
+ 8790, 865, -817, 689, 511, 538, 565, 4330, -817, 4472,
+ -817, -817, -817, -817, -817, 5548, 753, 4330, 902, 791,
+ 902, 816, 920, 826, 777, 824, 777, 777, 852, 1521,
+ -817, 1668, -817, 827, 830, -817, 1668, -817, 1668, -817,
+ -817, 882, -817, 2905, 667, 10752, 7398, 10832, 757, 595,
+ 753, -817, 753, 791, 902, -817, -817, -817, 1668, -817,
+ -817, -817, -817, 807, 842, 807, 807, -817, 65, 46,
+ -27, 96, 110, -817, -817, -817, -817, 791, 777, -817,
+ 1668, -817, -817, -817, 133, -817, 807, -817
+};
+
+/* YYPGOTO[NTERM-NUM]. */
+static const yytype_int16 yypgoto[] =
+{
+ -817, -817, -817, -370, -817, 24, -817, -571, 502, -817,
+ 527, -817, 9, -817, -314, 38, -69, -64, -817, -602,
+ -817, 475, -10, 896, -149, -1, -73, -817, -418, 16,
+ 1355, -312, 895, -56, -817, -19, -817, -817, 4, -817,
+ 929, -817, -817, -817, 1617, -817, -72, 278, -338, 48,
+ -17, -817, -379, -206, 76, -817, -296, -38, -817, -817,
+ -817, -817, -817, -817, -817, -817, -817, -817, -817, -817,
+ -817, -817, -817, -817, -817, -817, 56, -817, -817, -817,
+ -817, -817, -817, -817, -817, -817, -817, -31, -331, -542,
+ -37, -640, -817, -800, -786, 223, 310, 49, -817, -425,
+ -817, -500, -817, -18, -817, -817, -817, -817, -817, -817,
+ -817, 248, -817, -817, -817, -817, -817, -817, -817, -95,
+ -817, -817, -549, -817, -22, -817, -817, -817, -817, -817,
+ -817, 906, -817, -817, -817, -817, 712, -817, -817, -817,
+ -817, -817, -817, 801, 949, -817, -102, -817, -817, -817,
+ -817, -817, -817, 13, -817, 14, -817, 22, 1140, 1346,
+ 913, 1544, 1456, -817, -817, 71, -817, -428, 143, -304,
+ -816, -606, -11, -737, -96, 396, 227, 114, -817, -817,
+ -817, 181, -723, -810, 121, 236, -817, -651, -817, 43,
+ -638, -817, -817, -817, 99, -400, -817, -281, -817, 626,
+ -48, -13, -196, -591, -236, -44, 12, -2
+};
+
+/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
+ positive, shift that token. If negative, reduce the rule which
+ number is the opposite. If YYTABLE_NINF, syntax error. */
+#define YYTABLE_NINF -633
+static const yytype_int16 yytable[] =
+{
+ 119, 287, 302, 403, 319, 233, 212, 212, 328, 238,
+ 212, 71, 199, 71, 236, 524, 239, 277, 425, 563,
+ 362, 201, 202, 365, 621, 308, 746, 763, 120, 729,
+ 463, 575, 199, 529, 465, 728, 791, 614, 436, 815,
+ 397, 201, 202, 277, 366, 614, 885, 663, 308, 779,
+ 260, 267, 271, 642, 773, 277, 277, 277, 86, 320,
+ 86, 199, 621, 455, 216, 226, 456, 589, 227, 892,
+ 590, 276, 219, 219, 631, 561, 219, 569, -105, 946,
+ 846, 309, 618, -101, 851, 694, 572, 301, 696, -105,
+ 400, 943, 218, 218, 572, 978, 218, 972, 491, 948,
+ 199, 658, 3, 700, -290, 451, 831, 86, -290, -104,
+ 497, 278, -102, 839, 476, 224, 224, 235, -517, 224,
+ -109, 603, 219, -106, 317, 659, 360, 360, 689, 265,
+ 360, -516, 887, -296, -525, 645, 251, 278, 561, 401,
+ 569, 893, -518, 857, 219, 219, -103, 492, 219, 371,
+ 382, 382, 266, 270, 862, -107, 315, 316, 999, 498,
+ 477, -101, 478, 885, 293, 459, 634, -517, 779, 878,
+ 861, 690, 460, 905, 906, 319, -108, 520, 866, -104,
+ -516, -296, -296, 949, 295, -611, -106, -103, 482, 591,
+ 485, -518, 489, 634, 683, -92, 489, 725, 946, 972,
+ 317, -96, 469, -610, -610, 978, 297, -105, 453, -105,
+ 855, 305, 308, 306, 1033, 305, 418, 306, 212, 885,
+ 212, 212, 418, 305, -93, 306, 621, 425, 892, 434,
+ 622, 318, -100, 663, 624, 299, -519, 277, -104, 627,
+ -104, 502, 503, 504, 505, 734, 614, 614, 1057, 966,
+ 241, 955, -106, 260, -106, 637, 973, 745, 322, 466,
+ 515, 449, 86, 235, 324, 525, 769, -98, 454, -611,
+ 820, 779, 435, 779, 437, -103, 426, -103, 429, 885,
+ 881, -521, 744, 824, 219, -519, 219, 219, -99, 277,
+ 219, -95, 219, 992, 576, 577, 468, 86, -97, -94,
+ 1005, 457, 325, 634, 218, 897, 218, 318, 86, -526,
+ 86, 482, 305, 231, 306, 634, 934, 578, 71, 219,
+ 663, 308, 663, 506, 699, 260, 329, 224, -607, 224,
+ -521, 278, 1015, 501, 423, -73, -102, 593, 779, 1001,
+ 234, 604, 606, 522, 58, 235, -520, 212, 360, 360,
+ 360, 360, 448, 507, 508, 434, -87, 780, 1044, -522,
+ -436, -109, 567, -341, 996, 86, 219, 219, 219, 219,
+ 86, 219, 219, 648, -95, 649, 650, 651, 652, -108,
+ 219, 405, 86, 278, 993, 219, 684, -511, 524, -511,
+ -97, 356, 779, 684, 779, -520, 234, 764, 469, 856,
+ 517, 360, 360, -514, 771, 517, 567, -608, -522, 760,
+ 212, -341, -341, 219, 407, 86, 586, 409, 434, 219,
+ 219, -436, 628, 842, -104, 567, 1032, 414, 779, -614,
+ 418, 418, 415, 277, 219, -607, -511, -511, -511, 357,
+ 358, -607, 119, 770, 865, 199, 867, 765, 469, 462,
+ 1021, 567, -514, 71, 201, 202, 460, 235, 877, 1064,
+ 872, 219, 219, 212, 667, -95, 416, -436, -514, -436,
+ -436, 434, 653, 621, -106, 422, 219, 76, 567, 76,
+ 424, -97, 476, 277, 654, 442, -95, -103, 707, -95,
+ -614, 76, 76, -95, 614, 76, 714, 587, 330, 476,
+ 86, 588, -97, 444, 305, -97, 306, 693, 693, -97,
+ 86, 693, 657, 658, -608, 615, -514, -514, 228, 648,
+ -608, 649, 650, 651, 652, 330, 76, 278, 477, 219,
+ 478, 752, 727, 727, 231, 419, -614, 659, -614, -614,
+ 452, 76, -610, 446, 708, 477, 739, 478, 479, 731,
+ 710, 864, 715, 255, 353, 354, 355, -72, 640, 472,
+ 760, 330, 686, 76, 76, 315, 316, 76, 772, 721,
+ 458, 874, -525, 212, 845, -526, 579, 278, 476, 467,
+ 464, 434, 880, 420, 421, 212, 754, 406, 567, 757,
+ 987, 420, 447, 434, 808, 471, 989, 486, -523, -101,
+ 567, 755, -102, 277, 1000, 710, 490, 473, 474, 848,
+ 845, 476, 199, 418, -109, 351, 352, 353, 354, 355,
+ -92, 201, 202, -93, 477, -524, 478, 481, 469, 86,
+ 493, 86, 710, 496, 119, -100, 747, 832, 525, 219,
+ 499, 827, 829, 511, 752, 71, -523, -523, 835, 837,
+ 667, 219, -286, 86, 219, 730, 448, 477, 869, 478,
+ 481, 523, 609, 277, 476, 579, 581, 767, 858, 938,
+ 788, 860, 788, -524, -524, 712, 500, 817, 438, 807,
+ 942, 76, 476, -108, 585, 219, 623, 582, 1050, 439,
+ 440, 826, 86, 693, 859, 868, 891, 278, 854, 895,
+ -286, -286, -104, 76, -99, 76, 76, 632, 255, 76,
+ 477, 76, 478, 483, 755, 863, 76, 844, 847, 625,
+ 847, 710, 847, -95, 766, 594, 626, 76, 477, 76,
+ 478, 487, 710, 816, 476, 583, 584, 667, 76, 667,
+ 636, -87, 641, 445, 702, 685, 634, 86, -268, 687,
+ 86, 698, 86, 701, -297, 199, 255, 278, 219, 968,
+ -427, 219, 219, 717, 418, 719, 748, 817, 219, 219,
+ 918, 277, 667, 595, 596, 360, 1025, 723, 360, 927,
+ 477, 667, 478, 494, 76, 76, 76, 76, 76, 76,
+ 76, 76, 817, 219, 476, 517, 219, 86, 484, 76,
+ 713, 76, -297, -297, 76, 86, 782, 595, 596, 788,
+ 788, 971, 768, 974, 727, 789, 936, 783, 928, 793,
+ 929, 796, 834, 940, 1026, 1027, 794, -106, 255, 890,
+ 937, 786, 76, 890, 76, 939, 790, 792, 76, 76,
+ 477, 922, 478, 795, 926, 797, -269, 845, -97, -103,
+ 873, 833, 875, 76, 879, 1004, 898, 1006, 899, 900,
+ 904, 277, 1007, 908, 910, 903, 907, 909, 911, 330,
+ -94, 812, 41, 42, 43, 44, 86, 912, 913, 915,
+ 76, 76, 277, -270, 343, 344, 360, 788, 917, 807,
+ 219, 799, 800, 920, 801, 76, 807, 924, 944, 990,
+ 991, 86, 46, 47, 219, 947, 951, 962, 86, 86,
+ 953, 967, 86, 1043, 956, 1045, 958, 330, 979, 76,
+ -271, 1024, 1046, 351, 352, 353, 354, 355, 998, 76,
+ 1035, 847, 343, 344, 975, 1009, 649, 650, 651, 652,
+ 667, 1011, 1058, 816, 1016, 214, 214, 890, 76, 214,
+ 816, 1018, 816, 1034, 648, 963, 649, 650, 651, 652,
+ 1036, 1038, 1042, 1022, 1066, 1031, -610, 889, 788, -611,
+ 350, 351, 352, 353, 354, 355, 983, 248, 250, 1060,
+ 86, 638, 214, 214, 310, 311, 312, 313, 314, 369,
+ 386, 86, 1054, 774, 840, 303, 304, 876, 807, 1055,
+ 804, 1056, 870, 1047, 86, 86, 1053, 404, 291, 398,
+ 495, 413, 997, 888, 1010, 1012, 212, 86, 969, 886,
+ 1017, 965, 1019, 1020, 434, 600, 721, 847, 0, 952,
+ 954, 567, 0, 0, 957, 0, 959, 710, 960, 0,
+ 0, 0, 0, 86, 0, 86, 0, 0, 76, 0,
+ 76, 86, 816, 86, 816, 0, 0, 0, 76, 816,
+ 648, 816, 649, 650, 651, 652, 653, 0, 330, 0,
+ 76, 0, 76, 76, 0, 722, 0, 724, 654, 0,
+ 0, 812, 219, 343, 344, 970, 809, 0, 812, 0,
+ 812, 0, 1059, 1061, 1062, 1063, 0, 0, 0, 655,
+ 0, 0, 0, 816, 76, 656, 657, 658, 0, 0,
+ 0, 76, 0, 0, 0, 1067, 0, 0, 0, 348,
+ 349, 350, 351, 352, 353, 354, 355, 0, 0, 0,
+ 0, 659, 0, 214, 660, 0, 214, 214, 214, 0,
+ 303, 0, 113, 0, 113, 0, 0, 1037, 1039, 1040,
+ 1041, 0, 235, 0, 0, 0, 0, 214, 0, 214,
+ 214, 0, 0, 0, 0, 0, 76, 0, 0, 76,
+ 0, 76, 0, 0, 0, 0, 0, 76, 0, 0,
+ 76, 76, 0, 0, 0, 0, 0, 76, 76, 0,
+ 812, 113, 812, 818, 0, 279, 819, 812, 821, 812,
+ 648, 1065, 649, 650, 651, 652, 0, 0, 0, 0,
+ 0, 0, 76, 0, 0, 76, 76, 0, 0, 0,
+ 0, 279, 0, 0, 76, 0, 0, 0, 0, 0,
+ 0, 0, 0, 373, 383, 383, 383, 0, 0, 774,
+ 0, 812, 0, 0, 0, 775, 648, 0, 649, 650,
+ 651, 652, 0, 214, 0, 0, 0, 0, 527, 530,
+ 531, 532, 533, 534, 535, 536, 537, 538, 539, 540,
+ 541, 542, 543, 544, 0, 546, 547, 548, 549, 550,
+ 551, 552, 553, 554, 555, 774, 214, 0, 0, 0,
+ 0, 945, 0, 0, 0, 76, 809, 0, 0, 0,
+ 809, 0, 0, 809, 0, 809, 0, 0, 0, 76,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 76, 0, 914, 76, 0, 0, 0, 76, 76, 0,
+ 0, 76, 0, 0, 605, 607, 0, 0, 0, 0,
+ 0, 0, 0, 610, 214, 214, 113, 923, 114, 214,
+ 114, 605, 607, 214, 930, 931, 0, 83, 933, 83,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 630, 0, 0, 0, 0, 635, 0, 0,
+ 0, 113, 0, 0, 0, 0, 0, 0, 214, 0,
+ 0, 214, 113, 0, 113, 0, 0, 114, 0, 76,
+ 0, 280, 214, 0, 0, 809, 83, 809, 0, 0,
+ 76, 0, 809, 0, 809, 279, 0, 0, 0, 0,
+ 0, 0, 0, 76, 76, 0, 988, 280, 688, 0,
+ 0, 0, 0, 0, 0, 0, 76, 0, 0, 374,
+ 384, 384, 384, 214, 0, 0, 0, 0, 370, 113,
+ 1002, 1003, 0, 0, 113, 0, 809, 0, 117, 0,
+ 117, 0, 76, 1008, 76, 0, 113, 279, 0, 0,
+ 76, 0, 76, 0, 704, 0, 0, 0, 0, 0,
+ 0, 0, 648, 0, 649, 650, 651, 652, 653, 1028,
+ 0, 1029, 0, 0, 0, 0, 0, 1030, 0, 113,
+ 654, 76, 0, 0, 0, 0, 0, 117, 214, 0,
+ 0, 281, 214, 0, 0, 0, 0, 0, 0, 0,
+ 0, 655, 0, 0, 214, 0, 0, 656, 657, 658,
+ 0, 0, 0, 0, 0, 0, 0, 281, 214, 0,
+ 0, 214, 0, 0, 0, 0, 116, 0, 116, 375,
+ 385, 385, 114, 659, 214, 214, 660, 0, 0, 0,
+ 0, 83, 0, 0, 0, 0, 0, 0, 0, 661,
+ 0, 0, 0, 648, 0, 649, 650, 651, 652, 653,
+ 0, 0, 0, 0, 113, 0, 0, 114, 0, 0,
+ 0, 654, 0, 0, 113, 116, 83, 0, 114, 214,
+ 114, 0, 0, 0, 0, 0, 0, 83, 0, 83,
+ 0, 279, 655, 0, 0, 0, 0, 0, 656, 657,
+ 658, 280, 0, 0, 0, 0, 0, 214, 0, 0,
+ 0, 610, 825, 0, 828, 830, 0, 0, 0, 0,
+ 0, 836, 838, 0, 659, 0, 0, 660, 214, 0,
+ 0, 0, 0, 0, 0, 114, 0, 0, 0, 0,
+ 114, 279, 117, 0, 83, 0, 0, 0, 0, 83,
+ 0, 268, 114, 280, 0, 0, 0, 0, 0, 0,
+ 0, 83, 0, 0, 526, 871, 0, 0, 0, 0,
+ 828, 830, 0, 836, 838, 0, 0, 117, 0, 0,
+ 0, 0, 0, 0, 0, 114, 0, 0, 117, 0,
+ 117, 214, 0, 113, 83, 113, 0, 0, 0, 0,
+ 648, 0, 649, 650, 651, 652, 653, 0, 0, 0,
+ 0, 281, 0, 0, 0, 0, 0, 113, 654, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 116, 214, 0, 0, 0, 0, 0, 0, 0, 655,
+ 0, 0, 0, 919, 0, 117, 657, 658, 0, 0,
+ 117, 0, 0, 0, 0, 0, 113, 0, 0, 0,
+ 0, 279, 117, 281, 214, 116, 0, 0, 0, 0,
+ 114, 659, 0, 0, 0, 0, 116, 0, 116, 83,
+ 114, 919, 214, 0, 0, 0, 0, 0, 0, 83,
+ 0, 0, 0, 0, 0, 117, 0, 280, 0, 0,
+ 0, 408, 0, 0, 410, 411, 412, 0, 0, 0,
+ 0, 113, 0, 0, 113, 0, 113, 0, 0, 0,
+ 0, 279, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 116, 0, 0, 0, 0, 116, 0,
+ 0, 0, 0, 0, 0, 0, 0, 280, 0, 0,
+ 116, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 113, 0, 0, 0, 0, 0, 0, 0, 113,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 117, 0, 0, 116, 0, 0, 0, 0, 0, 1023,
+ 117, 0, 0, 0, 0, 0, 0, 0, 0, 114,
+ 0, 114, 0, 0, 0, 0, 0, 281, 83, 0,
+ 83, 0, 0, 0, 0, 0, 0, 703, 0, 0,
+ 0, 516, 0, 114, 0, 0, 528, 0, 0, 383,
+ 0, 0, 83, 0, 0, 214, 0, 0, 0, 0,
+ 113, 0, 0, 330, 331, 332, 333, 334, 335, 336,
+ 337, 338, 339, 340, 341, 342, 0, 281, 343, 344,
+ 0, 0, 114, 0, 0, 113, 0, 280, 116, 0,
+ 0, 83, 113, 113, 0, 0, 113, 0, 116, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 345, 0, 346, 347, 348, 349, 350, 351, 352, 353,
+ 354, 355, 0, 0, 0, 0, 0, 0, 0, 117,
+ -245, 117, 611, 613, 0, 0, 0, 114, 0, 383,
+ 114, 268, 114, 0, 0, 0, 83, 280, 0, 83,
+ 0, 83, 0, 117, 0, 0, 0, 526, 0, 0,
+ 984, 0, 0, 0, 113, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 113, 613, 0, 0, 268,
+ 0, 0, 0, 0, 0, 0, 0, 114, 113, 113,
+ 0, 0, 117, 0, 0, 114, 83, 281, 0, 0,
+ 0, 113, 0, 0, 83, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 116, 0, 116,
+ 0, 0, 0, 0, 0, 0, 0, 113, 0, 113,
+ 0, 697, 0, 0, 0, 113, 0, 113, 803, 0,
+ 0, 116, 0, 0, 0, 0, 0, 117, 0, 0,
+ 117, 0, 117, 0, 0, 384, 0, 281, 0, 0,
+ 0, 0, 0, 0, 0, 0, 114, 330, 331, 332,
+ 333, 334, 335, 336, 337, 83, 339, 340, 0, 0,
+ 116, 0, 343, 344, 0, 0, 0, 0, 0, 0,
+ 0, 114, 0, 0, 0, 0, 528, 117, 114, 114,
+ 83, 0, 114, 0, 0, 117, 0, 83, 83, 0,
+ 0, 83, 0, 0, 0, 0, 346, 347, 348, 349,
+ 350, 351, 352, 353, 354, 355, 758, 0, 0, 759,
+ 0, 0, 0, 0, 0, 116, 0, 0, 116, 0,
+ 116, 0, 613, 268, 0, 384, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 385, 985, 0, 0, 0,
+ 114, 0, 0, 0, 0, 982, 117, 0, 0, 83,
+ 0, 114, 0, 0, 0, 116, 0, 785, 0, 0,
+ 83, 0, 0, 116, 114, 114, 0, 0, 0, 0,
+ 0, 117, 0, 83, 83, 0, 0, 114, 117, 117,
+ 0, 0, 117, 0, 0, 823, 83, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 114, 0, 114, 841, 0, 0, 0,
+ 0, 114, 83, 114, 83, 0, 0, 0, 0, 0,
+ 83, 0, 83, 0, 0, 385, 0, 330, -633, -633,
+ -633, -633, 335, 336, 116, 0, -633, -633, 0, 0,
+ 0, 0, 343, 344, 0, 0, 986, 0, 0, 0,
+ 117, 0, 0, 0, 0, 0, 0, 0, 0, 116,
+ 0, 117, 0, 0, 0, 0, 116, 116, 0, 883,
+ 116, 0, 0, 0, 117, 117, 346, 347, 348, 349,
+ 350, 351, 352, 353, 354, 355, 0, 117, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 330, 331, 332, 333, 334, 335, 336, 0, 916,
+ 339, 340, 0, 117, 0, 117, 343, 344, 0, 0,
+ 0, 117, 0, 117, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 116, 0,
+ 0, 0, 932, 0, 0, 0, 0, 0, 0, 116,
+ 346, 347, 348, 349, 350, 351, 352, 353, 354, 355,
+ 268, 0, 116, 116, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 116, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 116, 0, 116, 0, 0, 0, 0, 0, 116,
+ 0, 116, -632, 4, 0, 5, 6, 7, 8, 9,
+ 0, 0, 0, 10, 11, 0, 0, 0, 12, 0,
+ 13, 14, 15, 16, 17, 18, 19, 0, 0, 0,
+ 0, 0, 20, 21, 22, 23, 24, 25, 26, 0,
+ 0, 27, 0, 0, 0, 0, 0, 28, 29, 30,
+ 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
+ 0, 41, 42, 43, 44, 0, 45, 46, 47, 0,
+ 48, 49, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 50, 0, 0, 51, 52, 0, 53, 54, 0, 55,
+ 0, 0, 56, 57, 58, 59, 60, 61, 62, 63,
+ 64, -614, 0, 0, 0, 0, 0, 0, 0, -614,
+ -614, -614, 0, 0, -614, -614, -614, 0, -614, 0,
+ 0, 65, 66, 67, 0, 756, 0, -614, -614, -614,
+ -614, 0, 0, 0, -632, 0, -632, 0, -614, -614,
+ 0, -614, -614, -614, -614, -614, 0, 0, 0, 0,
+ 0, 330, 331, 332, 333, 334, 335, 336, 337, 338,
+ 339, 340, 341, 342, 0, 0, 343, 344, 0, 0,
+ 0, -614, -614, -614, -614, -614, -614, -614, -614, -614,
+ -614, -614, -614, -614, 0, 0, -614, -614, -614, 0,
+ 761, -614, 0, 0, 0, 0, 0, -614, 345, 0,
+ 346, 347, 348, 349, 350, 351, 352, 353, 354, 355,
+ 0, -614, 0, 0, -614, 0, 0, -105, -614, -614,
+ -614, -614, -614, -614, -614, -614, -614, -614, -614, -614,
+ 0, 0, 0, 0, -614, -614, -614, -614, -614, -511,
+ 0, -614, -614, -614, 0, -614, 0, -511, -511, -511,
+ 0, 0, -511, -511, -511, 0, -511, 0, 0, 0,
+ 0, 703, 0, 0, -511, 0, -511, -511, -511, 0,
+ 0, 0, 0, 0, 0, 0, -511, -511, 0, -511,
+ -511, -511, -511, -511, 0, 0, 0, 330, 331, 332,
+ 333, 334, 335, 336, 337, 338, 339, 340, 341, 342,
+ 0, 0, 343, 344, 0, 0, 0, 0, 0, -511,
+ -511, -511, -511, -511, -511, -511, -511, -511, -511, -511,
+ -511, -511, 0, 0, -511, -511, -511, 0, -511, -511,
+ 0, 0, 0, 0, 345, -511, 346, 347, 348, 349,
+ 350, 351, 352, 353, 354, 355, 0, 0, 0, -511,
+ 0, 0, -511, 0, 0, -511, -511, -511, -511, -511,
+ -511, -511, -511, -511, -511, -511, -511, -511, 0, 0,
+ 0, 0, 0, -511, -511, -511, -511, -514, 0, -511,
+ -511, -511, 0, -511, 0, -514, -514, -514, 0, 0,
+ -514, -514, -514, 0, -514, 0, 0, 0, 0, 0,
+ 0, 0, -514, 0, -514, -514, -514, 0, 0, 0,
+ 0, 0, 0, 0, -514, -514, 0, -514, -514, -514,
+ -514, -514, 0, 0, 0, 330, 331, 332, 333, 334,
+ 335, 336, 337, 338, 339, 340, 341, 342, 0, 0,
+ 343, 344, 0, 0, 0, 0, 0, -514, -514, -514,
+ -514, -514, -514, -514, -514, -514, -514, -514, -514, -514,
+ 0, 0, -514, -514, -514, 0, -514, -514, 0, 0,
+ 0, 0, 345, -514, 346, 347, 348, 349, 350, 351,
+ 352, 353, 354, 355, 0, 0, 0, -514, 0, 0,
+ -514, 0, 0, -514, -514, -514, -514, -514, -514, -514,
+ -514, -514, -514, -514, -514, -514, 0, 0, 0, 0,
+ 0, -514, -514, -514, -514, -615, 0, -514, -514, -514,
+ 0, -514, 0, -615, -615, -615, 0, 0, -615, -615,
+ -615, 0, -615, 0, 0, 0, 0, 0, 0, 0,
+ 0, -615, -615, -615, -615, 0, 0, 0, 0, 0,
+ 0, 0, -615, -615, 0, -615, -615, -615, -615, -615,
+ 0, 0, 0, 330, 331, 332, 333, 334, 335, 336,
+ 337, 338, 339, 340, -633, -633, 0, 0, 343, 344,
+ 0, 0, 0, 0, 0, -615, -615, -615, -615, -615,
+ -615, -615, -615, -615, -615, -615, -615, -615, 0, 0,
+ -615, -615, -615, 0, 0, -615, 0, 0, 0, 0,
+ 0, -615, 346, 347, 348, 349, 350, 351, 352, 353,
+ 354, 355, 0, 0, 0, -615, 0, 0, -615, 0,
+ 0, 0, -615, -615, -615, -615, -615, -615, -615, -615,
+ -615, -615, -615, -615, 0, 0, 0, 0, -615, -615,
+ -615, -615, -615, -616, 0, -615, -615, -615, 0, -615,
+ 0, -616, -616, -616, 0, 0, -616, -616, -616, 0,
+ -616, 0, 0, 0, 0, 0, 0, 0, 0, -616,
+ -616, -616, -616, 0, 0, 0, 0, 0, 0, 0,
+ -616, -616, 0, -616, -616, -616, -616, -616, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, -616, -616, -616, -616, -616, -616, -616,
+ -616, -616, -616, -616, -616, -616, 0, 0, -616, -616,
+ -616, 0, 0, -616, 0, 0, 0, 0, 0, -616,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, -616, 0, 0, -616, 0, 0, 0,
+ -616, -616, -616, -616, -616, -616, -616, -616, -616, -616,
+ -616, -616, 0, 0, 0, 0, -616, -616, -616, -616,
+ -616, -296, 0, -616, -616, -616, 0, -616, 0, -296,
+ -296, -296, 0, 0, -296, -296, -296, 0, -296, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, -296, -296,
+ -296, 0, 0, 0, 0, 0, 0, 0, -296, -296,
+ 0, -296, -296, -296, -296, -296, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, -296, -296, -296, -296, -296, -296, -296, -296, -296,
+ -296, -296, -296, -296, 0, 0, -296, -296, -296, 0,
+ 762, -296, 0, 0, 0, 0, 0, -296, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, -296, 0, 0, -296, 0, 0, -107, -296, -296,
+ -296, -296, -296, -296, -296, -296, -296, -296, -296, -296,
+ 0, 0, 0, 0, 0, -296, -296, -296, -296, -435,
+ 0, -296, -296, -296, 0, -296, 0, -435, -435, -435,
+ 0, 0, -435, -435, -435, 0, -435, 0, 0, 0,
+ 0, 0, 0, 0, 0, -435, -435, -435, 0, 0,
+ 0, 0, 0, 0, 0, 0, -435, -435, 0, -435,
+ -435, -435, -435, -435, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, -435,
+ -435, -435, -435, -435, -435, -435, -435, -435, -435, -435,
+ -435, -435, 0, 0, -435, -435, -435, 0, 0, -435,
+ 0, 0, 0, 0, 0, -435, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, -435,
+ 0, 0, 0, 0, 0, 0, -435, 0, -435, -435,
+ -435, -435, -435, -435, -435, -435, -435, -435, 0, 0,
+ 0, 0, -435, -435, -435, -435, -435, -287, 231, -435,
+ -435, -435, 0, -435, 0, -287, -287, -287, 0, 0,
+ -287, -287, -287, 0, -287, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, -287, -287, -287, 0, 0, 0,
+ 0, 0, 0, 0, -287, -287, 0, -287, -287, -287,
+ -287, -287, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, -287, -287, -287,
+ -287, -287, -287, -287, -287, -287, -287, -287, -287, -287,
+ 0, 0, -287, -287, -287, 0, 0, -287, 0, 0,
+ 0, 0, 0, -287, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, -287, 0, 0,
+ -287, 0, 0, 0, -287, -287, -287, -287, -287, -287,
+ -287, -287, -287, -287, -287, -287, 0, 0, 0, 0,
+ 0, -287, -287, -287, -287, -425, 0, -287, -287, -287,
+ 0, -287, 0, -425, -425, -425, 0, 0, -425, -425,
+ -425, 0, -425, 0, 0, 0, 0, 0, 0, 0,
+ 0, -425, -425, -425, 0, 0, 0, 0, 0, 0,
+ 0, 0, -425, -425, 0, -425, -425, -425, -425, -425,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, -425, -425, -425, -425, -425,
+ -425, -425, -425, -425, -425, -425, -425, -425, 0, 0,
+ -425, -425, -425, 0, 0, -425, 0, 0, 0, 0,
+ 0, -425, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, -425, 0, 0, 0, 0,
+ 0, 0, -425, 0, -425, -425, -425, -425, -425, -425,
+ -425, -425, -425, -425, 0, 0, 0, 0, -425, -425,
+ -425, -425, -425, -303, -425, -425, -425, -425, 0, -425,
+ 0, -303, -303, -303, 0, 0, -303, -303, -303, 0,
+ -303, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ -303, -303, 0, 0, 0, 0, 0, 0, 0, 0,
+ -303, -303, 0, -303, -303, -303, -303, -303, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, -303, -303, -303, -303, -303, -303, -303,
+ -303, -303, -303, -303, -303, -303, 0, 0, -303, -303,
+ -303, 0, 0, -303, 0, 0, 0, 0, 0, -303,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, -303, 0, 0, 0, 0, 0, 0,
+ -303, 0, -303, -303, -303, -303, -303, -303, -303, -303,
+ -303, -303, 0, 0, 0, 0, 0, -303, -303, -303,
+ -303, -614, 228, -303, -303, -303, 0, -303, 0, -614,
+ -614, -614, 0, 0, 0, -614, -614, 0, -614, 0,
+ 0, 0, 0, 0, 0, 0, 0, -614, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, -614, -614,
+ 0, -614, -614, -614, -614, -614, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, -614, -614, -614, -614, -614, -614, -614, -614, -614,
+ -614, -614, -614, -614, 0, 0, -614, -614, -614, 0,
+ 705, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, -614, 0, 0, 0, 0, 0, -105, -614, 0,
+ -614, -614, -614, -614, -614, -614, -614, -614, -614, -614,
+ 0, 0, 0, 0, -614, -614, -614, -614, -96, -296,
+ 0, -614, 0, -614, 0, -614, 0, -296, -296, -296,
+ 0, 0, 0, -296, -296, 0, -296, 0, -632, 0,
+ 0, 0, 0, 0, 0, 0, -632, -632, -632, 0,
+ 0, -632, -632, -632, 0, -632, -296, -296, 0, -296,
+ -296, -296, -296, -296, -632, -632, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, -632, -632, 0, -632, -632,
+ -632, -632, -632, 0, 0, 0, 0, 0, 0, -296,
+ -296, -296, -296, -296, -296, -296, -296, -296, -296, -296,
+ -296, -296, 0, 0, -296, -296, -296, 0, 706, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, -632, 0, 0, 0, -296,
+ 0, 0, 0, 0, 0, -107, -296, 0, -296, -296,
+ -296, -296, -296, -296, -296, -296, -296, -296, -632, 0,
+ 0, 0, 0, -296, -296, -296, -98, 0, 0, -296,
+ 0, -296, 0, -296, 0, 0, 0, 0, 0, 0,
+ 0, -632, -632, 0, -632, 0, 0, 231, -632, 0,
+ -632, 252, -632, 5, 6, 7, 8, 9, -632, -632,
+ -632, 10, 11, 0, 0, -632, 12, 0, 13, 14,
+ 15, 16, 17, 18, 19, 0, 0, 0, 0, 0,
+ 20, 21, 22, 23, 24, 25, 26, 0, 0, 27,
+ 0, 0, 0, 0, 0, 28, 29, 253, 31, 32,
+ 33, 34, 35, 36, 37, 38, 39, 40, 0, 41,
+ 42, 43, 44, 0, 45, 46, 47, 0, 48, 49,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 50, 0,
+ 0, 51, 52, 0, 53, 54, 0, 55, 0, 0,
+ 56, 57, 58, 59, 60, 61, 62, 63, 64, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 65,
+ 66, 67, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, -632, 252, -632, 5, 6, 7, 8, 9,
+ 0, 0, -632, 10, 11, 0, -632, -632, 12, 0,
+ 13, 14, 15, 16, 17, 18, 19, 0, 0, 0,
+ 0, 0, 20, 21, 22, 23, 24, 25, 26, 0,
+ 0, 27, 0, 0, 0, 0, 0, 28, 29, 253,
+ 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
+ 0, 41, 42, 43, 44, 0, 45, 46, 47, 0,
+ 48, 49, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 50, 0, 0, 51, 52, 0, 53, 54, 0, 55,
+ 0, 0, 56, 57, 58, 59, 60, 61, 62, 63,
+ 64, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 65, 66, 67, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, -632, 252, -632, 5, 6, 7,
+ 8, 9, 0, 0, -632, 10, 11, 0, 0, -632,
+ 12, -632, 13, 14, 15, 16, 17, 18, 19, 0,
+ 0, 0, 0, 0, 20, 21, 22, 23, 24, 25,
+ 26, 0, 0, 27, 0, 0, 0, 0, 0, 28,
+ 29, 253, 31, 32, 33, 34, 35, 36, 37, 38,
+ 39, 40, 0, 41, 42, 43, 44, 0, 45, 46,
+ 47, 0, 48, 49, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 50, 0, 0, 51, 52, 0, 53, 54,
+ 0, 55, 0, 0, 56, 57, 58, 59, 60, 61,
+ 62, 63, 64, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 65, 66, 67, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, -632, 252, -632, 5,
+ 6, 7, 8, 9, 0, 0, -632, 10, 11, 0,
+ 0, -632, 12, 0, 13, 14, 15, 16, 17, 18,
+ 19, 0, 0, 0, 0, 0, 20, 21, 22, 23,
+ 24, 25, 26, 0, 0, 27, 0, 0, 0, 0,
+ 0, 28, 29, 253, 31, 32, 33, 34, 35, 36,
+ 37, 38, 39, 40, 0, 41, 42, 43, 44, 0,
+ 45, 46, 47, 0, 48, 49, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 50, 0, 0, 51, 52, 0,
+ 53, 54, 0, 55, 0, 0, 56, 57, 58, 59,
+ 60, 61, 62, 63, 64, 0, 0, 0, 0, 0,
+ 0, 0, 0, 252, 0, 5, 6, 7, 8, 9,
+ 0, -632, -632, 10, 11, 65, 66, 67, 12, 0,
+ 13, 14, 15, 16, 17, 18, 19, 0, -632, 0,
+ -632, 0, 20, 21, 22, 23, 24, 25, 26, 0,
+ 0, 27, 0, 0, 0, 0, 0, 28, 29, 253,
+ 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
+ 0, 41, 42, 43, 44, 0, 45, 46, 47, 0,
+ 48, 49, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 50, 0, 0, 51, 52, 0, 53, 54, 0, 55,
+ 0, 0, 56, 57, 58, 59, 60, 61, 62, 63,
+ 64, 0, 0, 0, 0, 0, 0, 0, 0, 252,
+ 0, 5, 6, 7, 8, 9, 0, 0, 0, 10,
+ 11, 65, 66, 67, 12, 0, 13, 14, 15, 16,
+ 17, 18, 19, 0, -632, 0, -632, 0, 20, 21,
+ 22, 23, 24, 25, 26, 0, 0, 27, 0, 0,
+ 0, 0, 0, 28, 29, 253, 31, 32, 33, 34,
+ 35, 36, 37, 38, 39, 40, 0, 41, 42, 43,
+ 44, 0, 45, 46, 47, 0, 48, 49, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 50, 0, 0, 254,
+ 52, 0, 53, 54, 0, 55, 0, 0, 56, 57,
+ 58, 59, 60, 61, 62, 63, 64, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 65, 66, 67,
+ 0, 0, 0, 0, 0, 0, 0, 0, -632, 0,
+ -632, 252, -632, 5, 6, 7, 8, 9, 0, 0,
+ 0, 10, 11, 0, 0, 0, 12, 0, 13, 14,
+ 15, 16, 17, 18, 19, 0, 0, 0, 0, 0,
+ 20, 21, 22, 23, 24, 25, 26, 0, 0, 27,
+ 0, 0, 0, 0, 0, 28, 29, 253, 31, 32,
+ 33, 34, 35, 36, 37, 38, 39, 40, 0, 41,
+ 42, 43, 44, 0, 45, 46, 47, 0, 48, 49,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 50, 0,
+ 0, 51, 52, 0, 53, 54, 0, 55, 0, 0,
+ 56, 57, 58, 59, 60, 61, 62, 63, 64, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 65,
+ 66, 67, 0, 0, 0, 0, 0, 0, 0, 0,
+ -632, 0, -632, 252, -632, 5, 6, 7, 8, 9,
+ 0, 0, 0, 10, 11, 0, 0, 0, 12, 0,
+ 13, 14, 15, 16, 17, 18, 19, 0, 0, 0,
+ 0, 0, 20, 21, 22, 23, 24, 25, 26, 0,
+ 0, 27, 0, 0, 0, 0, 0, 28, 29, 253,
+ 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
+ 0, 41, 42, 43, 44, 0, 45, 46, 47, 0,
+ 48, 49, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 50, 0, 0, 51, 52, 0, 53, 54, 0, 55,
+ 0, 0, 56, 57, 58, 59, 60, 61, 62, 63,
+ 64, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 65, 66, 67, 0, 0, -632, 4, 0, 5,
+ 6, 7, 8, 9, -632, 0, -632, 10, 11, 0,
+ 0, 0, 12, 0, 13, 14, 15, 16, 17, 18,
+ 19, 0, 0, 0, 0, 0, 20, 21, 22, 23,
+ 24, 25, 26, 0, 0, 27, 0, 0, 0, 0,
+ 0, 28, 29, 30, 31, 32, 33, 34, 35, 36,
+ 37, 38, 39, 40, 0, 41, 42, 43, 44, 0,
+ 45, 46, 47, 0, 48, 49, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 50, 0, 0, 51, 52, 0,
+ 53, 54, 0, 55, 0, 0, 56, 57, 58, 59,
+ 60, 61, 62, 63, 64, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 65, 66, 67, 0, 0,
+ -632, 0, 0, 0, 0, 0, 0, 0, -632, 252,
+ -632, 5, 6, 7, 8, 9, 0, 0, -632, 10,
+ 11, 0, 0, 0, 12, 0, 13, 14, 15, 16,
+ 17, 18, 19, 0, 0, 0, 0, 0, 20, 21,
+ 22, 23, 24, 25, 26, 0, 0, 27, 0, 0,
+ 0, 0, 0, 28, 29, 253, 31, 32, 33, 34,
+ 35, 36, 37, 38, 39, 40, 0, 41, 42, 43,
+ 44, 0, 45, 46, 47, 0, 48, 49, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 50, 0, 0, 51,
+ 52, 0, 53, 54, 0, 55, 0, 0, 56, 57,
+ 58, 59, 60, 61, 62, 63, 64, 0, 0, 0,
+ 0, 0, 0, 0, 0, 252, 0, 5, 6, 7,
+ 8, 9, 0, 0, 0, 10, 11, 65, 66, 67,
+ 12, 0, 13, 14, 15, 16, 17, 18, 19, 0,
+ -632, 0, -632, 0, 20, 21, 22, 23, 24, 25,
+ 26, 0, 0, 27, 0, 0, 0, 0, 0, 28,
+ 29, 253, 31, 32, 33, 34, 35, 36, 37, 38,
+ 39, 40, 0, 41, 42, 43, 44, 0, 45, 46,
+ 47, 0, 48, 49, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 50, 0, 0, 51, 52, 0, 53, 54,
+ 0, 55, 0, 0, 56, 57, 58, 59, 60, 61,
+ 62, 63, 64, 0, -632, 0, 0, 0, 0, 0,
+ 0, 0, 0, 5, 6, 7, 0, 9, 0, 0,
+ 0, 10, 11, 65, 66, 67, 12, 0, 13, 14,
+ 15, 16, 17, 18, 19, 0, -632, 0, -632, 0,
+ 20, 21, 22, 23, 24, 25, 26, 0, 0, 203,
+ 0, 0, 0, 0, 0, 0, 29, 0, 0, 32,
+ 33, 34, 35, 36, 37, 38, 39, 40, 204, 41,
+ 42, 43, 44, 0, 45, 46, 47, 0, 48, 49,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 205, 0,
+ 0, 206, 52, 0, 53, 54, 0, 207, 208, 209,
+ 56, 57, 210, 59, 60, 61, 62, 63, 64, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,
+ 6, 7, 0, 9, 0, 0, 0, 10, 11, 65,
+ 211, 67, 12, 0, 13, 14, 15, 16, 17, 18,
+ 19, 0, 0, 0, 235, 0, 20, 21, 22, 23,
+ 24, 25, 26, 0, 0, 27, 0, 0, 0, 0,
+ 0, 0, 29, 0, 0, 32, 33, 34, 35, 36,
+ 37, 38, 39, 40, 0, 41, 42, 43, 44, 0,
+ 45, 46, 47, 0, 48, 49, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 205, 0, 0, 206, 52, 0,
+ 53, 54, 0, 0, 0, 0, 56, 57, 58, 59,
+ 60, 61, 62, 63, 64, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 5, 6, 7, 0, 9,
+ 0, 0, 0, 10, 11, 65, 66, 67, 12, 0,
+ 13, 14, 15, 16, 17, 18, 19, 0, 305, 0,
+ 306, 0, 20, 21, 22, 23, 24, 25, 26, 0,
+ 0, 27, 0, 0, 0, 0, 0, 0, 29, 0,
+ 0, 32, 33, 34, 35, 36, 37, 38, 39, 40,
+ 0, 41, 42, 43, 44, 0, 45, 46, 47, 0,
+ 48, 49, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 205, 0, 0, 206, 52, 0, 53, 54, 0, 0,
+ 0, 0, 56, 57, 58, 59, 60, 61, 62, 63,
+ 64, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 5, 6, 7, 8, 9, 0, 0, 0, 10,
+ 11, 65, 66, 67, 12, 0, 13, 14, 15, 16,
+ 17, 18, 19, 0, 0, 0, 235, 0, 20, 21,
+ 22, 23, 24, 25, 26, 0, 0, 27, 0, 0,
+ 0, 0, 0, 28, 29, 30, 31, 32, 33, 34,
+ 35, 36, 37, 38, 39, 40, 0, 41, 42, 43,
+ 44, 0, 45, 46, 47, 0, 48, 49, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 50, 0, 0, 51,
+ 52, 0, 53, 54, 0, 55, 0, 0, 56, 57,
+ 58, 59, 60, 61, 62, 63, 64, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 5, 6, 7,
+ 8, 9, 0, 0, 0, 10, 11, 65, 66, 67,
+ 12, 0, 13, 14, 15, 16, 17, 18, 19, 0,
+ 500, 0, 0, 0, 20, 21, 22, 23, 24, 25,
+ 26, 0, 0, 27, 0, 0, 0, 0, 0, 28,
+ 29, 253, 31, 32, 33, 34, 35, 36, 37, 38,
+ 39, 40, 0, 41, 42, 43, 44, 0, 45, 46,
+ 47, 0, 48, 49, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 50, 0, 0, 51, 52, 0, 53, 54,
+ 0, 55, 0, 0, 56, 57, 58, 59, 60, 61,
+ 62, 63, 64, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 65, 66, 67, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 500, 121, 122, 123,
+ 124, 125, 126, 127, 128, 129, 130, 131, 132, 133,
+ 134, 135, 136, 137, 138, 139, 140, 141, 142, 143,
+ 144, 0, 0, 0, 145, 146, 147, 387, 388, 389,
+ 390, 152, 153, 154, 0, 0, 0, 0, 0, 155,
+ 156, 157, 158, 391, 392, 393, 394, 163, 37, 38,
+ 395, 40, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 165, 166, 167, 168, 169, 170, 171, 172,
+ 173, 0, 0, 174, 175, 0, 0, 176, 177, 178,
+ 179, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 180, 181, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 182, 183, 184, 185, 186, 187, 188,
+ 189, 190, 191, 0, 192, 193, 0, 0, 0, 0,
+ 0, 0, 194, 396, 121, 122, 123, 124, 125, 126,
+ 127, 128, 129, 130, 131, 132, 133, 134, 135, 136,
+ 137, 138, 139, 140, 141, 142, 143, 144, 0, 0,
+ 0, 145, 146, 147, 148, 149, 150, 151, 152, 153,
+ 154, 0, 0, 0, 0, 0, 155, 156, 157, 158,
+ 159, 160, 161, 162, 163, 284, 285, 164, 286, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 165,
+ 166, 167, 168, 169, 170, 171, 172, 173, 0, 0,
+ 174, 175, 0, 0, 176, 177, 178, 179, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 180, 181,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 182, 183, 184, 185, 186, 187, 188, 189, 190, 191,
+ 0, 192, 193, 0, 0, 0, 0, 0, 0, 194,
+ 121, 122, 123, 124, 125, 126, 127, 128, 129, 130,
+ 131, 132, 133, 134, 135, 136, 137, 138, 139, 140,
+ 141, 142, 143, 144, 0, 0, 0, 145, 146, 147,
+ 148, 149, 150, 151, 152, 153, 154, 0, 0, 0,
+ 0, 0, 155, 156, 157, 158, 159, 160, 161, 162,
+ 163, 237, 0, 164, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 165, 166, 167, 168, 169,
+ 170, 171, 172, 173, 0, 0, 174, 175, 0, 0,
+ 176, 177, 178, 179, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 180, 181, 0, 0, 57, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 182, 183, 184, 185,
+ 186, 187, 188, 189, 190, 191, 0, 192, 193, 0,
+ 0, 0, 0, 0, 0, 194, 121, 122, 123, 124,
+ 125, 126, 127, 128, 129, 130, 131, 132, 133, 134,
+ 135, 136, 137, 138, 139, 140, 141, 142, 143, 144,
+ 0, 0, 0, 145, 146, 147, 148, 149, 150, 151,
+ 152, 153, 154, 0, 0, 0, 0, 0, 155, 156,
+ 157, 158, 159, 160, 161, 162, 163, 0, 0, 164,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 165, 166, 167, 168, 169, 170, 171, 172, 173,
+ 0, 0, 174, 175, 0, 0, 176, 177, 178, 179,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 180, 181, 0, 0, 57, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 182, 183, 184, 185, 186, 187, 188, 189,
+ 190, 191, 0, 192, 193, 0, 0, 0, 0, 0,
+ 0, 194, 121, 122, 123, 124, 125, 126, 127, 128,
+ 129, 130, 131, 132, 133, 134, 135, 136, 137, 138,
+ 139, 140, 141, 142, 143, 144, 0, 0, 0, 145,
+ 146, 147, 148, 149, 150, 151, 152, 153, 154, 0,
+ 0, 0, 0, 0, 155, 156, 157, 158, 159, 160,
+ 161, 162, 163, 0, 0, 164, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 165, 166, 167,
+ 168, 169, 170, 171, 172, 173, 0, 0, 174, 175,
+ 0, 0, 176, 177, 178, 179, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 180, 181, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 182, 183,
+ 184, 185, 186, 187, 188, 189, 190, 191, 0, 192,
+ 193, 5, 6, 7, 0, 9, 0, 194, 0, 10,
+ 11, 0, 0, 0, 12, 0, 13, 14, 15, 242,
+ 243, 18, 19, 0, 0, 0, 0, 0, 244, 245,
+ 246, 23, 24, 25, 26, 0, 0, 203, 0, 0,
+ 0, 0, 0, 0, 272, 0, 0, 32, 33, 34,
+ 35, 36, 37, 38, 39, 40, 0, 41, 42, 43,
+ 44, 0, 45, 46, 47, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 273, 0, 0, 206,
+ 52, 0, 53, 54, 0, 0, 0, 0, 56, 57,
+ 58, 59, 60, 61, 62, 63, 64, 0, 0, 0,
+ 0, 0, 0, 5, 6, 7, 0, 9, 0, 0,
+ 0, 10, 11, 0, 0, 0, 12, 274, 13, 14,
+ 15, 242, 243, 18, 19, 275, 0, 0, 0, 0,
+ 244, 245, 246, 23, 24, 25, 26, 0, 0, 203,
+ 0, 0, 0, 0, 0, 0, 272, 0, 0, 32,
+ 33, 34, 35, 36, 37, 38, 39, 40, 0, 41,
+ 42, 43, 44, 0, 45, 46, 47, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 273, 0,
+ 0, 206, 52, 0, 53, 54, 0, 0, 0, 0,
+ 56, 57, 58, 59, 60, 61, 62, 63, 64, 0,
+ 0, 0, 0, 0, 0, 5, 6, 7, 8, 9,
+ 0, 0, 0, 10, 11, 0, 0, 0, 12, 274,
+ 13, 14, 15, 16, 17, 18, 19, 521, 0, 0,
+ 0, 0, 20, 21, 22, 23, 24, 25, 26, 0,
+ 0, 27, 0, 0, 0, 0, 0, 28, 29, 30,
+ 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
+ 0, 41, 42, 43, 44, 0, 45, 46, 47, 0,
+ 48, 49, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 50, 0, 0, 51, 52, 0, 53, 54, 0, 55,
+ 0, 0, 56, 57, 58, 59, 60, 61, 62, 63,
+ 64, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 5, 6, 7, 0, 9, 0, 0, 0, 10,
+ 11, 65, 66, 67, 12, 0, 13, 14, 15, 16,
+ 17, 18, 19, 0, 0, 0, 0, 0, 20, 21,
+ 22, 23, 24, 25, 26, 0, 0, 203, 0, 0,
+ 0, 0, 0, 0, 29, 0, 0, 32, 33, 34,
+ 35, 36, 37, 38, 39, 40, 204, 41, 42, 43,
+ 44, 0, 45, 46, 47, 0, 48, 49, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 205, 0, 0, 206,
+ 52, 0, 53, 54, 0, 207, 208, 209, 56, 57,
+ 210, 59, 60, 61, 62, 63, 64, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 5, 6, 7,
+ 8, 9, 0, 0, 0, 10, 11, 65, 211, 67,
+ 12, 0, 13, 14, 15, 16, 17, 18, 19, 0,
+ 0, 0, 0, 0, 20, 21, 22, 23, 24, 25,
+ 26, 0, 0, 27, 0, 0, 0, 0, 0, 28,
+ 29, 0, 31, 32, 33, 34, 35, 36, 37, 38,
+ 39, 40, 0, 41, 42, 43, 44, 0, 45, 46,
+ 47, 0, 48, 49, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 50, 0, 0, 51, 52, 0, 53, 54,
+ 0, 55, 0, 0, 56, 57, 58, 59, 60, 61,
+ 62, 63, 64, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 5, 6, 7, 0, 9, 0, 0,
+ 0, 10, 11, 65, 66, 67, 12, 0, 13, 14,
+ 15, 242, 243, 18, 19, 0, 0, 0, 0, 0,
+ 244, 245, 246, 23, 24, 25, 26, 0, 0, 203,
+ 0, 0, 0, 0, 0, 0, 29, 0, 0, 32,
+ 33, 34, 35, 36, 37, 38, 39, 40, 204, 41,
+ 42, 43, 44, 0, 45, 46, 47, 0, 48, 49,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 205, 0,
+ 0, 206, 52, 0, 53, 54, 0, 612, 208, 209,
+ 56, 57, 210, 59, 60, 61, 62, 63, 64, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,
+ 6, 7, 0, 9, 0, 0, 0, 10, 11, 65,
+ 211, 67, 12, 0, 13, 14, 15, 242, 243, 18,
+ 19, 0, 0, 0, 0, 0, 244, 245, 246, 23,
+ 24, 25, 26, 0, 0, 203, 0, 0, 0, 0,
+ 0, 0, 29, 0, 0, 32, 33, 34, 35, 36,
+ 37, 38, 39, 40, 204, 41, 42, 43, 44, 0,
+ 45, 46, 47, 0, 48, 49, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 205, 0, 0, 206, 52, 0,
+ 53, 54, 0, 207, 208, 0, 56, 57, 210, 59,
+ 60, 61, 62, 63, 64, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 5, 6, 7, 0, 9,
+ 0, 0, 0, 10, 11, 65, 211, 67, 12, 0,
+ 13, 14, 15, 242, 243, 18, 19, 0, 0, 0,
+ 0, 0, 244, 245, 246, 23, 24, 25, 26, 0,
+ 0, 203, 0, 0, 0, 0, 0, 0, 29, 0,
+ 0, 32, 33, 34, 35, 36, 37, 38, 39, 40,
+ 204, 41, 42, 43, 44, 0, 45, 46, 47, 0,
+ 48, 49, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 205, 0, 0, 206, 52, 0, 53, 54, 0, 0,
+ 208, 209, 56, 57, 210, 59, 60, 61, 62, 63,
+ 64, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 5, 6, 7, 0, 9, 0, 0, 0, 10,
+ 11, 65, 211, 67, 12, 0, 13, 14, 15, 242,
+ 243, 18, 19, 0, 0, 0, 0, 0, 244, 245,
+ 246, 23, 24, 25, 26, 0, 0, 203, 0, 0,
+ 0, 0, 0, 0, 29, 0, 0, 32, 33, 34,
+ 35, 36, 37, 38, 39, 40, 204, 41, 42, 43,
+ 44, 0, 45, 46, 47, 0, 48, 49, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 205, 0, 0, 206,
+ 52, 0, 53, 54, 0, 612, 208, 0, 56, 57,
+ 210, 59, 60, 61, 62, 63, 64, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 5, 6, 7,
+ 0, 9, 0, 0, 0, 10, 11, 65, 211, 67,
+ 12, 0, 13, 14, 15, 242, 243, 18, 19, 0,
+ 0, 0, 0, 0, 244, 245, 246, 23, 24, 25,
+ 26, 0, 0, 203, 0, 0, 0, 0, 0, 0,
+ 29, 0, 0, 32, 33, 34, 35, 36, 37, 38,
+ 39, 40, 204, 41, 42, 43, 44, 0, 45, 46,
+ 47, 0, 48, 49, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 205, 0, 0, 206, 52, 0, 53, 54,
+ 0, 0, 208, 0, 56, 57, 210, 59, 60, 61,
+ 62, 63, 64, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 5, 6, 7, 0, 9, 0, 0,
+ 0, 10, 11, 65, 211, 67, 12, 0, 13, 14,
+ 15, 16, 17, 18, 19, 0, 0, 0, 0, 0,
+ 20, 21, 22, 23, 24, 25, 26, 0, 0, 203,
+ 0, 0, 0, 0, 0, 0, 29, 0, 0, 32,
+ 33, 34, 35, 36, 37, 38, 39, 40, 0, 41,
+ 42, 43, 44, 0, 45, 46, 47, 0, 48, 49,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 205, 0,
+ 0, 206, 52, 0, 53, 54, 0, 514, 0, 0,
+ 56, 57, 58, 59, 60, 61, 62, 63, 64, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,
+ 6, 7, 0, 9, 0, 0, 0, 10, 11, 65,
+ 211, 67, 12, 0, 13, 14, 15, 242, 243, 18,
+ 19, 0, 0, 0, 0, 0, 244, 245, 246, 23,
+ 24, 25, 26, 0, 0, 203, 0, 0, 0, 0,
+ 0, 0, 29, 0, 0, 32, 33, 34, 35, 36,
+ 37, 38, 39, 40, 0, 41, 42, 43, 44, 0,
+ 45, 46, 47, 0, 48, 49, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 205, 0, 0, 206, 52, 0,
+ 53, 54, 0, 207, 0, 0, 56, 57, 58, 59,
+ 60, 61, 62, 63, 64, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 5, 6, 7, 0, 9,
+ 0, 0, 0, 10, 11, 65, 211, 67, 12, 0,
+ 13, 14, 15, 242, 243, 18, 19, 0, 0, 0,
+ 0, 0, 244, 245, 246, 23, 24, 25, 26, 0,
+ 0, 203, 0, 0, 0, 0, 0, 0, 29, 0,
+ 0, 32, 33, 34, 35, 36, 37, 38, 39, 40,
+ 0, 41, 42, 43, 44, 0, 45, 46, 47, 0,
+ 48, 49, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 205, 0, 0, 206, 52, 0, 53, 54, 0, 822,
+ 0, 0, 56, 57, 58, 59, 60, 61, 62, 63,
+ 64, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 5, 6, 7, 0, 9, 0, 0, 0, 10,
+ 11, 65, 211, 67, 12, 0, 13, 14, 15, 242,
+ 243, 18, 19, 0, 0, 0, 0, 0, 244, 245,
+ 246, 23, 24, 25, 26, 0, 0, 203, 0, 0,
+ 0, 0, 0, 0, 29, 0, 0, 32, 33, 34,
+ 35, 36, 37, 38, 39, 40, 0, 41, 42, 43,
+ 44, 0, 45, 46, 47, 0, 48, 49, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 205, 0, 0, 206,
+ 52, 0, 53, 54, 0, 514, 0, 0, 56, 57,
+ 58, 59, 60, 61, 62, 63, 64, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 5, 6, 7,
+ 0, 9, 0, 0, 0, 10, 11, 65, 211, 67,
+ 12, 0, 13, 14, 15, 242, 243, 18, 19, 0,
+ 0, 0, 0, 0, 244, 245, 246, 23, 24, 25,
+ 26, 0, 0, 203, 0, 0, 0, 0, 0, 0,
+ 29, 0, 0, 32, 33, 34, 35, 36, 37, 38,
+ 39, 40, 0, 41, 42, 43, 44, 0, 45, 46,
+ 47, 0, 48, 49, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 205, 0, 0, 206, 52, 0, 53, 54,
+ 0, 612, 0, 0, 56, 57, 58, 59, 60, 61,
+ 62, 63, 64, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 5, 6, 7, 0, 9, 0, 0,
+ 0, 10, 11, 65, 211, 67, 12, 0, 13, 14,
+ 15, 242, 243, 18, 19, 0, 0, 0, 0, 0,
+ 244, 245, 246, 23, 24, 25, 26, 0, 0, 203,
+ 0, 0, 0, 0, 0, 0, 29, 0, 0, 32,
+ 33, 34, 35, 36, 37, 38, 39, 40, 0, 41,
+ 42, 43, 44, 0, 45, 46, 47, 0, 48, 49,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 205, 0,
+ 0, 206, 52, 0, 53, 54, 0, 0, 0, 0,
+ 56, 57, 58, 59, 60, 61, 62, 63, 64, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,
+ 6, 7, 0, 9, 0, 0, 0, 10, 11, 65,
+ 211, 67, 12, 0, 13, 14, 15, 16, 17, 18,
+ 19, 0, 0, 0, 0, 0, 20, 21, 22, 23,
+ 24, 25, 26, 0, 0, 203, 0, 0, 0, 0,
+ 0, 0, 29, 0, 0, 32, 33, 34, 35, 36,
+ 37, 38, 39, 40, 0, 41, 42, 43, 44, 0,
+ 45, 46, 47, 0, 48, 49, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 205, 0, 0, 206, 52, 0,
+ 53, 54, 0, 0, 0, 0, 56, 57, 58, 59,
+ 60, 61, 62, 63, 64, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 5, 6, 7, 0, 9,
+ 0, 0, 0, 10, 11, 65, 211, 67, 12, 0,
+ 13, 14, 15, 16, 17, 18, 19, 0, 0, 0,
+ 0, 0, 20, 21, 22, 23, 24, 25, 26, 0,
+ 0, 27, 0, 0, 0, 0, 0, 0, 29, 0,
+ 0, 32, 33, 34, 35, 36, 37, 38, 39, 40,
+ 0, 41, 42, 43, 44, 0, 45, 46, 47, 0,
+ 48, 49, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 205, 0, 0, 206, 52, 0, 53, 54, 0, 0,
+ 0, 0, 56, 57, 58, 59, 60, 61, 62, 63,
+ 64, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 5, 6, 7, 0, 9, 0, 0, 0, 10,
+ 11, 65, 66, 67, 12, 0, 13, 14, 15, 242,
+ 243, 18, 19, 0, 0, 0, 0, 0, 244, 245,
+ 246, 23, 24, 25, 26, 0, 0, 203, 0, 0,
+ 0, 0, 0, 0, 272, 0, 0, 32, 33, 34,
+ 35, 36, 37, 38, 39, 40, 0, 41, 42, 43,
+ 44, 0, 45, 46, 47, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 273, 0, 0, 326,
+ 52, 0, 53, 54, 0, 327, 0, 0, 56, 57,
+ 58, 59, 60, 61, 62, 63, 64, 0, 0, 0,
+ 0, 0, 0, 5, 6, 7, 0, 9, 0, 0,
+ 0, 10, 11, 0, 0, 0, 12, 274, 13, 14,
+ 15, 242, 243, 18, 19, 0, 0, 0, 0, 0,
+ 244, 245, 246, 23, 24, 25, 26, 0, 0, 203,
+ 0, 0, 0, 0, 0, 0, 272, 0, 0, 32,
+ 33, 34, 35, 36, 37, 38, 39, 40, 0, 41,
+ 42, 43, 44, 0, 45, 46, 47, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 368, 0,
+ 0, 51, 52, 0, 53, 54, 0, 55, 0, 0,
+ 56, 57, 58, 59, 60, 61, 62, 63, 64, 0,
+ 0, 0, 0, 0, 0, 5, 6, 7, 0, 9,
+ 0, 0, 0, 10, 11, 0, 0, 0, 12, 274,
+ 13, 14, 15, 242, 243, 18, 19, 0, 0, 0,
+ 0, 0, 244, 245, 246, 23, 24, 25, 26, 0,
+ 0, 203, 0, 0, 0, 0, 0, 0, 272, 0,
+ 0, 32, 33, 34, 376, 36, 37, 38, 377, 40,
+ 0, 41, 42, 43, 44, 0, 45, 46, 47, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 378, 0, 0,
+ 379, 0, 0, 206, 52, 0, 53, 54, 0, 0,
+ 0, 0, 56, 57, 58, 59, 60, 61, 62, 63,
+ 64, 0, 0, 0, 0, 0, 0, 5, 6, 7,
+ 0, 9, 0, 0, 0, 10, 11, 0, 0, 0,
+ 12, 274, 13, 14, 15, 242, 243, 18, 19, 0,
+ 0, 0, 0, 0, 244, 245, 246, 23, 24, 25,
+ 26, 0, 0, 203, 0, 0, 0, 0, 0, 0,
+ 272, 0, 0, 32, 33, 34, 376, 36, 37, 38,
+ 377, 40, 0, 41, 42, 43, 44, 0, 45, 46,
+ 47, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 379, 0, 0, 206, 52, 0, 53, 54,
+ 0, 0, 0, 0, 56, 57, 58, 59, 60, 61,
+ 62, 63, 64, 0, 0, 0, 0, 0, 0, 5,
+ 6, 7, 0, 9, 0, 0, 0, 10, 11, 0,
+ 0, 0, 12, 274, 13, 14, 15, 242, 243, 18,
+ 19, 0, 0, 0, 0, 0, 244, 245, 246, 23,
+ 24, 25, 26, 0, 0, 203, 0, 0, 0, 0,
+ 0, 0, 272, 0, 0, 32, 33, 34, 35, 36,
+ 37, 38, 39, 40, 0, 41, 42, 43, 44, 0,
+ 45, 46, 47, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 273, 0, 0, 326, 52, 0,
+ 53, 54, 0, 0, 0, 0, 56, 57, 58, 59,
+ 60, 61, 62, 63, 64, 0, 0, 0, 0, 0,
+ 0, 5, 6, 7, 0, 9, 0, 0, 0, 10,
+ 11, 0, 0, 0, 12, 274, 13, 14, 15, 242,
+ 243, 18, 19, 0, 0, 0, 0, 0, 244, 245,
+ 246, 23, 24, 25, 26, 0, 0, 203, 0, 0,
+ 0, 0, 0, 0, 272, 0, 0, 32, 33, 34,
+ 35, 36, 37, 38, 39, 40, 0, 41, 42, 43,
+ 44, 0, 45, 46, 47, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 902, 0, 0, 206,
+ 52, 0, 53, 54, 0, 0, 0, 0, 56, 57,
+ 58, 59, 60, 61, 62, 63, 64, 0, 0, 0,
+ 0, 0, 0, 5, 6, 7, 0, 9, 0, 0,
+ 0, 10, 11, 0, 0, 0, 12, 274, 13, 14,
+ 15, 242, 243, 18, 19, 0, 0, 0, 0, 0,
+ 244, 245, 246, 23, 24, 25, 26, 0, 0, 203,
+ 0, 0, 0, 0, 0, 0, 272, 0, 0, 32,
+ 33, 34, 35, 36, 37, 38, 39, 40, 0, 41,
+ 42, 43, 44, 0, 45, 46, 47, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 981, 0,
+ 0, 206, 52, 0, 53, 54, 0, 0, 0, 0,
+ 56, 57, 58, 59, 60, 61, 62, 63, 64, 0,
+ 0, 0, 0, 0, 556, 557, 0, 0, 558, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 274,
+ 165, 166, 167, 168, 169, 170, 171, 172, 173, 0,
+ 0, 174, 175, 0, 0, 176, 177, 178, 179, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 180,
+ 181, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 182, 183, 184, 185, 186, 187, 188, 189, 190,
+ 191, 0, 192, 193, 564, 565, 0, 0, 566, 0,
+ 194, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 165, 166, 167, 168, 169, 170, 171, 172, 173, 0,
+ 0, 174, 175, 0, 0, 176, 177, 178, 179, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 180,
+ 181, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 182, 183, 184, 185, 186, 187, 188, 189, 190,
+ 191, 0, 192, 193, 601, 565, 0, 0, 602, 0,
+ 194, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 165, 166, 167, 168, 169, 170, 171, 172, 173, 0,
+ 0, 174, 175, 0, 0, 176, 177, 178, 179, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 180,
+ 181, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 182, 183, 184, 185, 186, 187, 188, 189, 190,
+ 191, 0, 192, 193, 616, 557, 0, 0, 617, 0,
+ 194, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 165, 166, 167, 168, 169, 170, 171, 172, 173, 0,
+ 0, 174, 175, 0, 0, 176, 177, 178, 179, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 180,
+ 181, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 182, 183, 184, 185, 186, 187, 188, 189, 190,
+ 191, 0, 192, 193, 619, 565, 0, 0, 620, 0,
+ 194, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 165, 166, 167, 168, 169, 170, 171, 172, 173, 0,
+ 0, 174, 175, 0, 0, 176, 177, 178, 179, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 180,
+ 181, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 182, 183, 184, 185, 186, 187, 188, 189, 190,
+ 191, 0, 192, 193, 643, 557, 0, 0, 644, 0,
+ 194, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 165, 166, 167, 168, 169, 170, 171, 172, 173, 0,
+ 0, 174, 175, 0, 0, 176, 177, 178, 179, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 180,
+ 181, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 182, 183, 184, 185, 186, 187, 188, 189, 190,
+ 191, 0, 192, 193, 646, 565, 0, 0, 647, 0,
+ 194, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 165, 166, 167, 168, 169, 170, 171, 172, 173, 0,
+ 0, 174, 175, 0, 0, 176, 177, 178, 179, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 180,
+ 181, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 182, 183, 184, 185, 186, 187, 188, 189, 190,
+ 191, 0, 192, 193, 732, 557, 0, 0, 733, 0,
+ 194, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 165, 166, 167, 168, 169, 170, 171, 172, 173, 0,
+ 0, 174, 175, 0, 0, 176, 177, 178, 179, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 180,
+ 181, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 182, 183, 184, 185, 186, 187, 188, 189, 190,
+ 191, 0, 192, 193, 735, 565, 0, 0, 736, 0,
+ 194, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 165, 166, 167, 168, 169, 170, 171, 172, 173, 0,
+ 0, 174, 175, 0, 0, 176, 177, 178, 179, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 180,
+ 181, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 182, 183, 184, 185, 186, 187, 188, 189, 190,
+ 191, 0, 192, 193, 742, 557, 0, 0, 743, 0,
+ 194, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 165, 166, 167, 168, 169, 170, 171, 172, 173, 0,
+ 0, 174, 175, 0, 0, 176, 177, 178, 179, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 180,
+ 181, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 182, 183, 184, 185, 186, 187, 188, 189, 190,
+ 191, 0, 192, 193, 1013, 557, 0, 0, 1014, 0,
+ 194, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 165, 166, 167, 168, 169, 170, 171, 172, 173, 0,
+ 0, 174, 175, 0, 0, 176, 177, 178, 179, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 180,
+ 181, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 182, 183, 184, 185, 186, 187, 188, 189, 190,
+ 191, 0, 192, 193, 1048, 557, 0, 0, 1049, 0,
+ 194, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 165, 166, 167, 168, 169, 170, 171, 172, 173, 0,
+ 0, 174, 175, 0, 0, 176, 177, 178, 179, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 180,
+ 181, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 182, 183, 184, 185, 186, 187, 188, 189, 190,
+ 191, 0, 192, 193, 1051, 565, 0, 0, 1052, 0,
+ 194, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 165, 166, 167, 168, 169, 170, 171, 172, 173, 0,
+ 0, 174, 175, 0, 0, 176, 177, 178, 179, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 180,
+ 181, 330, 331, 332, 333, 334, 335, 336, 337, 338,
+ 339, 340, 341, 342, 0, 0, 343, 344, 0, 0,
+ 0, 182, 183, 184, 185, 186, 187, 188, 189, 190,
+ 191, 0, 192, 193, 0, 0, 0, 0, 0, 0,
+ 194, 0, 0, 0, 0, 0, 0, 0, 345, 0,
+ 346, 347, 348, 349, 350, 351, 352, 353, 354, 355,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 235
+};
+
+#define yypact_value_is_default(yystate) \
+ ((yystate) == (-817))
+
+#define yytable_value_is_error(yytable_value) \
+ ((yytable_value) == (-633))
+
+static const yytype_int16 yycheck[] =
+{
+ 2, 57, 66, 98, 76, 22, 16, 17, 81, 28,
+ 20, 2, 8, 4, 27, 329, 29, 55, 224, 357,
+ 89, 8, 8, 92, 424, 69, 597, 618, 4, 578,
+ 266, 362, 28, 329, 270, 577, 674, 416, 234, 690,
+ 96, 28, 28, 81, 92, 424, 783, 475, 92, 655,
+ 51, 53, 54, 471, 645, 93, 94, 95, 2, 76,
+ 4, 57, 462, 259, 16, 17, 262, 379, 20, 792,
+ 1, 55, 16, 17, 444, 356, 20, 358, 13, 879,
+ 720, 69, 420, 25, 724, 510, 13, 65, 513, 25,
+ 87, 877, 16, 17, 13, 911, 20, 907, 63, 29,
+ 96, 99, 0, 521, 140, 254, 708, 51, 144, 13,
+ 63, 55, 25, 715, 63, 16, 17, 144, 87, 20,
+ 25, 402, 66, 13, 26, 123, 88, 89, 78, 53,
+ 92, 87, 783, 87, 89, 473, 56, 81, 419, 136,
+ 421, 792, 87, 734, 88, 89, 13, 112, 92, 93,
+ 94, 95, 53, 54, 745, 25, 37, 38, 944, 112,
+ 109, 116, 111, 900, 143, 137, 447, 136, 774, 775,
+ 741, 121, 144, 811, 812, 247, 25, 326, 749, 25,
+ 136, 135, 136, 113, 143, 139, 25, 25, 290, 120,
+ 292, 136, 294, 474, 143, 137, 298, 27, 998, 1009,
+ 26, 137, 275, 139, 139, 1021, 143, 142, 256, 144,
+ 137, 142, 256, 144, 1000, 142, 218, 144, 228, 956,
+ 230, 231, 224, 142, 137, 144, 626, 433, 951, 231,
+ 426, 133, 137, 661, 430, 143, 87, 275, 142, 435,
+ 144, 310, 311, 312, 313, 583, 625, 626, 1034, 900,
+ 133, 889, 142, 254, 144, 451, 907, 595, 28, 272,
+ 324, 252, 206, 144, 116, 329, 636, 137, 256, 139,
+ 695, 877, 234, 879, 236, 142, 228, 144, 230, 1016,
+ 780, 87, 594, 701, 228, 136, 230, 231, 137, 327,
+ 234, 137, 236, 933, 363, 364, 274, 241, 137, 137,
+ 951, 263, 137, 584, 228, 805, 230, 133, 252, 89,
+ 254, 413, 142, 139, 144, 596, 858, 365, 309, 263,
+ 748, 365, 750, 314, 520, 326, 116, 228, 26, 230,
+ 136, 275, 970, 309, 89, 116, 116, 381, 944, 945,
+ 139, 405, 406, 327, 102, 144, 87, 357, 310, 311,
+ 312, 313, 89, 315, 316, 357, 137, 661, 1009, 87,
+ 26, 116, 358, 87, 935, 309, 310, 311, 312, 313,
+ 314, 315, 316, 52, 25, 54, 55, 56, 57, 116,
+ 324, 89, 326, 327, 933, 329, 488, 87, 702, 87,
+ 25, 87, 998, 495, 1000, 136, 139, 89, 471, 730,
+ 324, 363, 364, 87, 640, 329, 402, 26, 136, 615,
+ 420, 135, 136, 357, 137, 359, 378, 56, 420, 363,
+ 364, 87, 441, 719, 116, 421, 997, 116, 1034, 26,
+ 432, 433, 90, 471, 378, 133, 136, 135, 136, 135,
+ 136, 139, 444, 639, 748, 441, 750, 89, 521, 137,
+ 137, 447, 136, 444, 441, 441, 144, 144, 137, 1050,
+ 89, 405, 406, 473, 475, 116, 137, 133, 87, 135,
+ 136, 473, 58, 873, 116, 89, 420, 2, 474, 4,
+ 137, 116, 63, 521, 70, 139, 137, 116, 560, 140,
+ 87, 16, 17, 144, 873, 20, 568, 52, 70, 63,
+ 444, 56, 137, 133, 142, 140, 144, 509, 510, 144,
+ 454, 513, 98, 99, 133, 416, 135, 136, 139, 52,
+ 139, 54, 55, 56, 57, 70, 51, 471, 109, 473,
+ 111, 603, 576, 577, 139, 87, 133, 123, 135, 136,
+ 140, 66, 139, 87, 561, 109, 590, 111, 112, 580,
+ 563, 747, 569, 51, 126, 127, 128, 116, 459, 87,
+ 766, 70, 143, 88, 89, 37, 38, 92, 641, 571,
+ 141, 767, 89, 583, 15, 89, 17, 521, 63, 56,
+ 134, 583, 778, 135, 136, 595, 603, 89, 584, 608,
+ 921, 135, 136, 595, 690, 137, 927, 112, 87, 116,
+ 596, 603, 116, 641, 137, 618, 112, 135, 136, 14,
+ 15, 63, 608, 615, 116, 124, 125, 126, 127, 128,
+ 137, 608, 608, 137, 109, 87, 111, 112, 701, 573,
+ 112, 575, 645, 112, 636, 137, 598, 709, 702, 583,
+ 70, 705, 706, 96, 716, 636, 135, 136, 712, 713,
+ 661, 595, 87, 597, 598, 579, 89, 109, 753, 111,
+ 112, 137, 114, 701, 63, 17, 56, 629, 737, 865,
+ 672, 740, 674, 135, 136, 89, 142, 690, 54, 690,
+ 876, 206, 63, 116, 25, 629, 140, 87, 1026, 65,
+ 66, 704, 636, 695, 738, 751, 792, 641, 729, 795,
+ 135, 136, 116, 228, 137, 230, 231, 134, 206, 234,
+ 109, 236, 111, 112, 716, 746, 241, 719, 720, 137,
+ 722, 734, 724, 137, 625, 87, 137, 252, 109, 254,
+ 111, 112, 745, 690, 63, 135, 136, 748, 263, 750,
+ 133, 137, 137, 241, 116, 143, 1027, 691, 137, 143,
+ 694, 137, 696, 137, 87, 751, 254, 701, 702, 87,
+ 139, 705, 706, 10, 766, 8, 139, 780, 712, 713,
+ 834, 809, 783, 135, 136, 737, 87, 13, 740, 848,
+ 109, 792, 111, 112, 309, 310, 311, 312, 313, 314,
+ 315, 316, 805, 737, 63, 719, 740, 741, 67, 324,
+ 89, 326, 135, 136, 329, 749, 116, 135, 136, 811,
+ 812, 907, 134, 909, 858, 52, 860, 137, 849, 676,
+ 851, 678, 89, 867, 135, 136, 52, 116, 326, 786,
+ 861, 137, 357, 790, 359, 866, 137, 137, 363, 364,
+ 109, 843, 111, 137, 846, 52, 137, 15, 137, 116,
+ 137, 141, 134, 378, 137, 951, 121, 953, 116, 137,
+ 137, 899, 958, 814, 815, 809, 137, 137, 142, 70,
+ 137, 690, 59, 60, 61, 62, 820, 10, 134, 10,
+ 405, 406, 920, 137, 85, 86, 848, 889, 118, 900,
+ 834, 54, 55, 90, 57, 420, 907, 9, 137, 930,
+ 931, 845, 65, 66, 848, 140, 137, 121, 852, 853,
+ 137, 56, 856, 1009, 137, 1011, 137, 70, 134, 444,
+ 137, 56, 1018, 124, 125, 126, 127, 128, 137, 454,
+ 10, 933, 85, 86, 52, 137, 54, 55, 56, 57,
+ 951, 137, 1038, 900, 137, 16, 17, 904, 473, 20,
+ 907, 137, 909, 137, 52, 899, 54, 55, 56, 57,
+ 134, 137, 110, 976, 1060, 996, 139, 786, 970, 139,
+ 123, 124, 125, 126, 127, 128, 920, 48, 49, 137,
+ 924, 454, 53, 54, 40, 41, 42, 43, 44, 93,
+ 95, 935, 1029, 91, 716, 66, 67, 774, 1009, 1030,
+ 690, 1032, 754, 1021, 948, 949, 1028, 101, 59, 96,
+ 298, 210, 941, 786, 965, 966, 1026, 961, 904, 783,
+ 971, 900, 973, 974, 1026, 399, 1028, 1029, -1, 886,
+ 887, 1027, -1, -1, 891, -1, 893, 1050, 895, -1,
+ -1, -1, -1, 987, -1, 989, -1, -1, 573, -1,
+ 575, 995, 1009, 997, 1011, -1, -1, -1, 583, 1016,
+ 52, 1018, 54, 55, 56, 57, 58, -1, 70, -1,
+ 595, -1, 597, 598, -1, 573, -1, 575, 70, -1,
+ -1, 900, 1026, 85, 86, 904, 690, -1, 907, -1,
+ 909, -1, 1043, 1044, 1045, 1046, -1, -1, -1, 91,
+ -1, -1, -1, 1060, 629, 97, 98, 99, -1, -1,
+ -1, 636, -1, -1, -1, 1066, -1, -1, -1, 121,
+ 122, 123, 124, 125, 126, 127, 128, -1, -1, -1,
+ -1, 123, -1, 204, 126, -1, 207, 208, 209, -1,
+ 211, -1, 2, -1, 4, -1, -1, 1004, 1005, 1006,
+ 1007, -1, 144, -1, -1, -1, -1, 228, -1, 230,
+ 231, -1, -1, -1, -1, -1, 691, -1, -1, 694,
+ -1, 696, -1, -1, -1, -1, -1, 702, -1, -1,
+ 705, 706, -1, -1, -1, -1, -1, 712, 713, -1,
+ 1009, 51, 1011, 691, -1, 55, 694, 1016, 696, 1018,
+ 52, 1058, 54, 55, 56, 57, -1, -1, -1, -1,
+ -1, -1, 737, -1, -1, 740, 741, -1, -1, -1,
+ -1, 81, -1, -1, 749, -1, -1, -1, -1, -1,
+ -1, -1, -1, 93, 94, 95, 96, -1, -1, 91,
+ -1, 1060, -1, -1, -1, 97, 52, -1, 54, 55,
+ 56, 57, -1, 324, -1, -1, -1, -1, 329, 330,
+ 331, 332, 333, 334, 335, 336, 337, 338, 339, 340,
+ 341, 342, 343, 344, -1, 346, 347, 348, 349, 350,
+ 351, 352, 353, 354, 355, 91, 357, -1, -1, -1,
+ -1, 97, -1, -1, -1, 820, 900, -1, -1, -1,
+ 904, -1, -1, 907, -1, 909, -1, -1, -1, 834,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 845, -1, 820, 848, -1, -1, -1, 852, 853, -1,
+ -1, 856, -1, -1, 405, 406, -1, -1, -1, -1,
+ -1, -1, -1, 414, 415, 416, 206, 845, 2, 420,
+ 4, 422, 423, 424, 852, 853, -1, 2, 856, 4,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 443, -1, -1, -1, -1, 448, -1, -1,
+ -1, 241, -1, -1, -1, -1, -1, -1, 459, -1,
+ -1, 462, 252, -1, 254, -1, -1, 51, -1, 924,
+ -1, 55, 473, -1, -1, 1009, 51, 1011, -1, -1,
+ 935, -1, 1016, -1, 1018, 275, -1, -1, -1, -1,
+ -1, -1, -1, 948, 949, -1, 924, 81, 499, -1,
+ -1, -1, -1, -1, -1, -1, 961, -1, -1, 93,
+ 94, 95, 96, 514, -1, -1, -1, -1, 93, 309,
+ 948, 949, -1, -1, 314, -1, 1060, -1, 2, -1,
+ 4, -1, 987, 961, 989, -1, 326, 327, -1, -1,
+ 995, -1, 997, -1, 545, -1, -1, -1, -1, -1,
+ -1, -1, 52, -1, 54, 55, 56, 57, 58, 987,
+ -1, 989, -1, -1, -1, -1, -1, 995, -1, 359,
+ 70, 1026, -1, -1, -1, -1, -1, 51, 579, -1,
+ -1, 55, 583, -1, -1, -1, -1, -1, -1, -1,
+ -1, 91, -1, -1, 595, -1, -1, 97, 98, 99,
+ -1, -1, -1, -1, -1, -1, -1, 81, 609, -1,
+ -1, 612, -1, -1, -1, -1, 2, -1, 4, 93,
+ 94, 95, 206, 123, 625, 626, 126, -1, -1, -1,
+ -1, 206, -1, -1, -1, -1, -1, -1, -1, 139,
+ -1, -1, -1, 52, -1, 54, 55, 56, 57, 58,
+ -1, -1, -1, -1, 444, -1, -1, 241, -1, -1,
+ -1, 70, -1, -1, 454, 51, 241, -1, 252, 670,
+ 254, -1, -1, -1, -1, -1, -1, 252, -1, 254,
+ -1, 471, 91, -1, -1, -1, -1, -1, 97, 98,
+ 99, 275, -1, -1, -1, -1, -1, 698, -1, -1,
+ -1, 702, 703, -1, 705, 706, -1, -1, -1, -1,
+ -1, 712, 713, -1, 123, -1, -1, 126, 719, -1,
+ -1, -1, -1, -1, -1, 309, -1, -1, -1, -1,
+ 314, 521, 206, -1, 309, -1, -1, -1, -1, 314,
+ -1, 54, 326, 327, -1, -1, -1, -1, -1, -1,
+ -1, 326, -1, -1, 329, 756, -1, -1, -1, -1,
+ 761, 762, -1, 764, 765, -1, -1, 241, -1, -1,
+ -1, -1, -1, -1, -1, 359, -1, -1, 252, -1,
+ 254, 782, -1, 573, 359, 575, -1, -1, -1, -1,
+ 52, -1, 54, 55, 56, 57, 58, -1, -1, -1,
+ -1, 275, -1, -1, -1, -1, -1, 597, 70, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 206, 822, -1, -1, -1, -1, -1, -1, -1, 91,
+ -1, -1, -1, 834, -1, 309, 98, 99, -1, -1,
+ 314, -1, -1, -1, -1, -1, 636, -1, -1, -1,
+ -1, 641, 326, 327, 855, 241, -1, -1, -1, -1,
+ 444, 123, -1, -1, -1, -1, 252, -1, 254, 444,
+ 454, 872, 873, -1, -1, -1, -1, -1, -1, 454,
+ -1, -1, -1, -1, -1, 359, -1, 471, -1, -1,
+ -1, 204, -1, -1, 207, 208, 209, -1, -1, -1,
+ -1, 691, -1, -1, 694, -1, 696, -1, -1, -1,
+ -1, 701, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 309, -1, -1, -1, -1, 314, -1,
+ -1, -1, -1, -1, -1, -1, -1, 521, -1, -1,
+ 326, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 741, -1, -1, -1, -1, -1, -1, -1, 749,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 444, -1, -1, 359, -1, -1, -1, -1, -1, 980,
+ 454, -1, -1, -1, -1, -1, -1, -1, -1, 573,
+ -1, 575, -1, -1, -1, -1, -1, 471, 573, -1,
+ 575, -1, -1, -1, -1, -1, -1, 44, -1, -1,
+ -1, 324, -1, 597, -1, -1, 329, -1, -1, 809,
+ -1, -1, 597, -1, -1, 1026, -1, -1, -1, -1,
+ 820, -1, -1, 70, 71, 72, 73, 74, 75, 76,
+ 77, 78, 79, 80, 81, 82, -1, 521, 85, 86,
+ -1, -1, 636, -1, -1, 845, -1, 641, 444, -1,
+ -1, 636, 852, 853, -1, -1, 856, -1, 454, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 117, -1, 119, 120, 121, 122, 123, 124, 125, 126,
+ 127, 128, -1, -1, -1, -1, -1, -1, -1, 573,
+ 137, 575, 415, 416, -1, -1, -1, 691, -1, 899,
+ 694, 424, 696, -1, -1, -1, 691, 701, -1, 694,
+ -1, 696, -1, 597, -1, -1, -1, 702, -1, -1,
+ 920, -1, -1, -1, 924, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 935, 459, -1, -1, 462,
+ -1, -1, -1, -1, -1, -1, -1, 741, 948, 949,
+ -1, -1, 636, -1, -1, 749, 741, 641, -1, -1,
+ -1, 961, -1, -1, 749, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 573, -1, 575,
+ -1, -1, -1, -1, -1, -1, -1, 987, -1, 989,
+ -1, 514, -1, -1, -1, 995, -1, 997, 682, -1,
+ -1, 597, -1, -1, -1, -1, -1, 691, -1, -1,
+ 694, -1, 696, -1, -1, 809, -1, 701, -1, -1,
+ -1, -1, -1, -1, -1, -1, 820, 70, 71, 72,
+ 73, 74, 75, 76, 77, 820, 79, 80, -1, -1,
+ 636, -1, 85, 86, -1, -1, -1, -1, -1, -1,
+ -1, 845, -1, -1, -1, -1, 579, 741, 852, 853,
+ 845, -1, 856, -1, -1, 749, -1, 852, 853, -1,
+ -1, 856, -1, -1, -1, -1, 119, 120, 121, 122,
+ 123, 124, 125, 126, 127, 128, 609, -1, -1, 612,
+ -1, -1, -1, -1, -1, 691, -1, -1, 694, -1,
+ 696, -1, 625, 626, -1, 899, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 809, 920, -1, -1, -1,
+ 924, -1, -1, -1, -1, 920, 820, -1, -1, 924,
+ -1, 935, -1, -1, -1, 741, -1, 670, -1, -1,
+ 935, -1, -1, 749, 948, 949, -1, -1, -1, -1,
+ -1, 845, -1, 948, 949, -1, -1, 961, 852, 853,
+ -1, -1, 856, -1, -1, 698, 961, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 987, -1, 989, 719, -1, -1, -1,
+ -1, 995, 987, 997, 989, -1, -1, -1, -1, -1,
+ 995, -1, 997, -1, -1, 899, -1, 70, 71, 72,
+ 73, 74, 75, 76, 820, -1, 79, 80, -1, -1,
+ -1, -1, 85, 86, -1, -1, 920, -1, -1, -1,
+ 924, -1, -1, -1, -1, -1, -1, -1, -1, 845,
+ -1, 935, -1, -1, -1, -1, 852, 853, -1, 782,
+ 856, -1, -1, -1, 948, 949, 119, 120, 121, 122,
+ 123, 124, 125, 126, 127, 128, -1, 961, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 70, 71, 72, 73, 74, 75, 76, -1, 822,
+ 79, 80, -1, 987, -1, 989, 85, 86, -1, -1,
+ -1, 995, -1, 997, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 924, -1,
+ -1, -1, 855, -1, -1, -1, -1, -1, -1, 935,
+ 119, 120, 121, 122, 123, 124, 125, 126, 127, 128,
+ 873, -1, 948, 949, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 961, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 987, -1, 989, -1, -1, -1, -1, -1, 995,
+ -1, 997, 0, 1, -1, 3, 4, 5, 6, 7,
+ -1, -1, -1, 11, 12, -1, -1, -1, 16, -1,
+ 18, 19, 20, 21, 22, 23, 24, -1, -1, -1,
+ -1, -1, 30, 31, 32, 33, 34, 35, 36, -1,
+ -1, 39, -1, -1, -1, -1, -1, 45, 46, 47,
+ 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
+ -1, 59, 60, 61, 62, -1, 64, 65, 66, -1,
+ 68, 69, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 88, -1, -1, 91, 92, -1, 94, 95, -1, 97,
+ -1, -1, 100, 101, 102, 103, 104, 105, 106, 107,
+ 108, 0, -1, -1, -1, -1, -1, -1, -1, 8,
+ 9, 10, -1, -1, 13, 14, 15, -1, 17, -1,
+ -1, 129, 130, 131, -1, 44, -1, 26, 27, 28,
+ 29, -1, -1, -1, 142, -1, 144, -1, 37, 38,
+ -1, 40, 41, 42, 43, 44, -1, -1, -1, -1,
+ -1, 70, 71, 72, 73, 74, 75, 76, 77, 78,
+ 79, 80, 81, 82, -1, -1, 85, 86, -1, -1,
+ -1, 70, 71, 72, 73, 74, 75, 76, 77, 78,
+ 79, 80, 81, 82, -1, -1, 85, 86, 87, -1,
+ 89, 90, -1, -1, -1, -1, -1, 96, 117, -1,
+ 119, 120, 121, 122, 123, 124, 125, 126, 127, 128,
+ -1, 110, -1, -1, 113, -1, -1, 116, 117, 118,
+ 119, 120, 121, 122, 123, 124, 125, 126, 127, 128,
+ -1, -1, -1, -1, 133, 134, 135, 136, 137, 0,
+ -1, 140, 141, 142, -1, 144, -1, 8, 9, 10,
+ -1, -1, 13, 14, 15, -1, 17, -1, -1, -1,
+ -1, 44, -1, -1, 25, -1, 27, 28, 29, -1,
+ -1, -1, -1, -1, -1, -1, 37, 38, -1, 40,
+ 41, 42, 43, 44, -1, -1, -1, 70, 71, 72,
+ 73, 74, 75, 76, 77, 78, 79, 80, 81, 82,
+ -1, -1, 85, 86, -1, -1, -1, -1, -1, 70,
+ 71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
+ 81, 82, -1, -1, 85, 86, 87, -1, 89, 90,
+ -1, -1, -1, -1, 117, 96, 119, 120, 121, 122,
+ 123, 124, 125, 126, 127, 128, -1, -1, -1, 110,
+ -1, -1, 113, -1, -1, 116, 117, 118, 119, 120,
+ 121, 122, 123, 124, 125, 126, 127, 128, -1, -1,
+ -1, -1, -1, 134, 135, 136, 137, 0, -1, 140,
+ 141, 142, -1, 144, -1, 8, 9, 10, -1, -1,
+ 13, 14, 15, -1, 17, -1, -1, -1, -1, -1,
+ -1, -1, 25, -1, 27, 28, 29, -1, -1, -1,
+ -1, -1, -1, -1, 37, 38, -1, 40, 41, 42,
+ 43, 44, -1, -1, -1, 70, 71, 72, 73, 74,
+ 75, 76, 77, 78, 79, 80, 81, 82, -1, -1,
+ 85, 86, -1, -1, -1, -1, -1, 70, 71, 72,
+ 73, 74, 75, 76, 77, 78, 79, 80, 81, 82,
+ -1, -1, 85, 86, 87, -1, 89, 90, -1, -1,
+ -1, -1, 117, 96, 119, 120, 121, 122, 123, 124,
+ 125, 126, 127, 128, -1, -1, -1, 110, -1, -1,
+ 113, -1, -1, 116, 117, 118, 119, 120, 121, 122,
+ 123, 124, 125, 126, 127, 128, -1, -1, -1, -1,
+ -1, 134, 135, 136, 137, 0, -1, 140, 141, 142,
+ -1, 144, -1, 8, 9, 10, -1, -1, 13, 14,
+ 15, -1, 17, -1, -1, -1, -1, -1, -1, -1,
+ -1, 26, 27, 28, 29, -1, -1, -1, -1, -1,
+ -1, -1, 37, 38, -1, 40, 41, 42, 43, 44,
+ -1, -1, -1, 70, 71, 72, 73, 74, 75, 76,
+ 77, 78, 79, 80, 81, 82, -1, -1, 85, 86,
+ -1, -1, -1, -1, -1, 70, 71, 72, 73, 74,
+ 75, 76, 77, 78, 79, 80, 81, 82, -1, -1,
+ 85, 86, 87, -1, -1, 90, -1, -1, -1, -1,
+ -1, 96, 119, 120, 121, 122, 123, 124, 125, 126,
+ 127, 128, -1, -1, -1, 110, -1, -1, 113, -1,
+ -1, -1, 117, 118, 119, 120, 121, 122, 123, 124,
+ 125, 126, 127, 128, -1, -1, -1, -1, 133, 134,
+ 135, 136, 137, 0, -1, 140, 141, 142, -1, 144,
+ -1, 8, 9, 10, -1, -1, 13, 14, 15, -1,
+ 17, -1, -1, -1, -1, -1, -1, -1, -1, 26,
+ 27, 28, 29, -1, -1, -1, -1, -1, -1, -1,
+ 37, 38, -1, 40, 41, 42, 43, 44, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 70, 71, 72, 73, 74, 75, 76,
+ 77, 78, 79, 80, 81, 82, -1, -1, 85, 86,
+ 87, -1, -1, 90, -1, -1, -1, -1, -1, 96,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 110, -1, -1, 113, -1, -1, -1,
+ 117, 118, 119, 120, 121, 122, 123, 124, 125, 126,
+ 127, 128, -1, -1, -1, -1, 133, 134, 135, 136,
+ 137, 0, -1, 140, 141, 142, -1, 144, -1, 8,
+ 9, 10, -1, -1, 13, 14, 15, -1, 17, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 27, 28,
+ 29, -1, -1, -1, -1, -1, -1, -1, 37, 38,
+ -1, 40, 41, 42, 43, 44, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 70, 71, 72, 73, 74, 75, 76, 77, 78,
+ 79, 80, 81, 82, -1, -1, 85, 86, 87, -1,
+ 89, 90, -1, -1, -1, -1, -1, 96, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 110, -1, -1, 113, -1, -1, 116, 117, 118,
+ 119, 120, 121, 122, 123, 124, 125, 126, 127, 128,
+ -1, -1, -1, -1, -1, 134, 135, 136, 137, 0,
+ -1, 140, 141, 142, -1, 144, -1, 8, 9, 10,
+ -1, -1, 13, 14, 15, -1, 17, -1, -1, -1,
+ -1, -1, -1, -1, -1, 26, 27, 28, -1, -1,
+ -1, -1, -1, -1, -1, -1, 37, 38, -1, 40,
+ 41, 42, 43, 44, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 70,
+ 71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
+ 81, 82, -1, -1, 85, 86, 87, -1, -1, 90,
+ -1, -1, -1, -1, -1, 96, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 110,
+ -1, -1, -1, -1, -1, -1, 117, -1, 119, 120,
+ 121, 122, 123, 124, 125, 126, 127, 128, -1, -1,
+ -1, -1, 133, 134, 135, 136, 137, 0, 139, 140,
+ 141, 142, -1, 144, -1, 8, 9, 10, -1, -1,
+ 13, 14, 15, -1, 17, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 27, 28, 29, -1, -1, -1,
+ -1, -1, -1, -1, 37, 38, -1, 40, 41, 42,
+ 43, 44, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 70, 71, 72,
+ 73, 74, 75, 76, 77, 78, 79, 80, 81, 82,
+ -1, -1, 85, 86, 87, -1, -1, 90, -1, -1,
+ -1, -1, -1, 96, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 110, -1, -1,
+ 113, -1, -1, -1, 117, 118, 119, 120, 121, 122,
+ 123, 124, 125, 126, 127, 128, -1, -1, -1, -1,
+ -1, 134, 135, 136, 137, 0, -1, 140, 141, 142,
+ -1, 144, -1, 8, 9, 10, -1, -1, 13, 14,
+ 15, -1, 17, -1, -1, -1, -1, -1, -1, -1,
+ -1, 26, 27, 28, -1, -1, -1, -1, -1, -1,
+ -1, -1, 37, 38, -1, 40, 41, 42, 43, 44,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 70, 71, 72, 73, 74,
+ 75, 76, 77, 78, 79, 80, 81, 82, -1, -1,
+ 85, 86, 87, -1, -1, 90, -1, -1, -1, -1,
+ -1, 96, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 110, -1, -1, -1, -1,
+ -1, -1, 117, -1, 119, 120, 121, 122, 123, 124,
+ 125, 126, 127, 128, -1, -1, -1, -1, 133, 134,
+ 135, 136, 137, 0, 139, 140, 141, 142, -1, 144,
+ -1, 8, 9, 10, -1, -1, 13, 14, 15, -1,
+ 17, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 27, 28, -1, -1, -1, -1, -1, -1, -1, -1,
+ 37, 38, -1, 40, 41, 42, 43, 44, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 70, 71, 72, 73, 74, 75, 76,
+ 77, 78, 79, 80, 81, 82, -1, -1, 85, 86,
+ 87, -1, -1, 90, -1, -1, -1, -1, -1, 96,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 110, -1, -1, -1, -1, -1, -1,
+ 117, -1, 119, 120, 121, 122, 123, 124, 125, 126,
+ 127, 128, -1, -1, -1, -1, -1, 134, 135, 136,
+ 137, 0, 139, 140, 141, 142, -1, 144, -1, 8,
+ 9, 10, -1, -1, -1, 14, 15, -1, 17, -1,
+ -1, -1, -1, -1, -1, -1, -1, 26, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 37, 38,
+ -1, 40, 41, 42, 43, 44, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 70, 71, 72, 73, 74, 75, 76, 77, 78,
+ 79, 80, 81, 82, -1, -1, 85, 86, 87, -1,
+ 89, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 110, -1, -1, -1, -1, -1, 116, 117, -1,
+ 119, 120, 121, 122, 123, 124, 125, 126, 127, 128,
+ -1, -1, -1, -1, 133, 134, 135, 136, 137, 0,
+ -1, 140, -1, 142, -1, 144, -1, 8, 9, 10,
+ -1, -1, -1, 14, 15, -1, 17, -1, 0, -1,
+ -1, -1, -1, -1, -1, -1, 8, 9, 10, -1,
+ -1, 13, 14, 15, -1, 17, 37, 38, -1, 40,
+ 41, 42, 43, 44, 26, 27, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 37, 38, -1, 40, 41,
+ 42, 43, 44, -1, -1, -1, -1, -1, -1, 70,
+ 71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
+ 81, 82, -1, -1, 85, 86, 87, -1, 89, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 87, -1, -1, -1, 110,
+ -1, -1, -1, -1, -1, 116, 117, -1, 119, 120,
+ 121, 122, 123, 124, 125, 126, 127, 128, 110, -1,
+ -1, -1, -1, 134, 135, 136, 137, -1, -1, 140,
+ -1, 142, -1, 144, -1, -1, -1, -1, -1, -1,
+ -1, 133, 134, -1, 136, -1, -1, 139, 140, -1,
+ 142, 1, 144, 3, 4, 5, 6, 7, 8, 9,
+ 10, 11, 12, -1, -1, 15, 16, -1, 18, 19,
+ 20, 21, 22, 23, 24, -1, -1, -1, -1, -1,
+ 30, 31, 32, 33, 34, 35, 36, -1, -1, 39,
+ -1, -1, -1, -1, -1, 45, 46, 47, 48, 49,
+ 50, 51, 52, 53, 54, 55, 56, 57, -1, 59,
+ 60, 61, 62, -1, 64, 65, 66, -1, 68, 69,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 88, -1,
+ -1, 91, 92, -1, 94, 95, -1, 97, -1, -1,
+ 100, 101, 102, 103, 104, 105, 106, 107, 108, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 129,
+ 130, 131, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 142, 1, 144, 3, 4, 5, 6, 7,
+ -1, -1, 10, 11, 12, -1, 14, 15, 16, -1,
+ 18, 19, 20, 21, 22, 23, 24, -1, -1, -1,
+ -1, -1, 30, 31, 32, 33, 34, 35, 36, -1,
+ -1, 39, -1, -1, -1, -1, -1, 45, 46, 47,
+ 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
+ -1, 59, 60, 61, 62, -1, 64, 65, 66, -1,
+ 68, 69, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 88, -1, -1, 91, 92, -1, 94, 95, -1, 97,
+ -1, -1, 100, 101, 102, 103, 104, 105, 106, 107,
+ 108, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 129, 130, 131, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 142, 1, 144, 3, 4, 5,
+ 6, 7, -1, -1, 10, 11, 12, -1, -1, 15,
+ 16, 17, 18, 19, 20, 21, 22, 23, 24, -1,
+ -1, -1, -1, -1, 30, 31, 32, 33, 34, 35,
+ 36, -1, -1, 39, -1, -1, -1, -1, -1, 45,
+ 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
+ 56, 57, -1, 59, 60, 61, 62, -1, 64, 65,
+ 66, -1, 68, 69, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 88, -1, -1, 91, 92, -1, 94, 95,
+ -1, 97, -1, -1, 100, 101, 102, 103, 104, 105,
+ 106, 107, 108, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 129, 130, 131, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 142, 1, 144, 3,
+ 4, 5, 6, 7, -1, -1, 10, 11, 12, -1,
+ -1, 15, 16, -1, 18, 19, 20, 21, 22, 23,
+ 24, -1, -1, -1, -1, -1, 30, 31, 32, 33,
+ 34, 35, 36, -1, -1, 39, -1, -1, -1, -1,
+ -1, 45, 46, 47, 48, 49, 50, 51, 52, 53,
+ 54, 55, 56, 57, -1, 59, 60, 61, 62, -1,
+ 64, 65, 66, -1, 68, 69, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 88, -1, -1, 91, 92, -1,
+ 94, 95, -1, 97, -1, -1, 100, 101, 102, 103,
+ 104, 105, 106, 107, 108, -1, -1, -1, -1, -1,
+ -1, -1, -1, 1, -1, 3, 4, 5, 6, 7,
+ -1, 9, 10, 11, 12, 129, 130, 131, 16, -1,
+ 18, 19, 20, 21, 22, 23, 24, -1, 142, -1,
+ 144, -1, 30, 31, 32, 33, 34, 35, 36, -1,
+ -1, 39, -1, -1, -1, -1, -1, 45, 46, 47,
+ 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
+ -1, 59, 60, 61, 62, -1, 64, 65, 66, -1,
+ 68, 69, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 88, -1, -1, 91, 92, -1, 94, 95, -1, 97,
+ -1, -1, 100, 101, 102, 103, 104, 105, 106, 107,
+ 108, -1, -1, -1, -1, -1, -1, -1, -1, 1,
+ -1, 3, 4, 5, 6, 7, -1, -1, -1, 11,
+ 12, 129, 130, 131, 16, -1, 18, 19, 20, 21,
+ 22, 23, 24, -1, 142, -1, 144, -1, 30, 31,
+ 32, 33, 34, 35, 36, -1, -1, 39, -1, -1,
+ -1, -1, -1, 45, 46, 47, 48, 49, 50, 51,
+ 52, 53, 54, 55, 56, 57, -1, 59, 60, 61,
+ 62, -1, 64, 65, 66, -1, 68, 69, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 88, -1, -1, 91,
+ 92, -1, 94, 95, -1, 97, -1, -1, 100, 101,
+ 102, 103, 104, 105, 106, 107, 108, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 129, 130, 131,
+ -1, -1, -1, -1, -1, -1, -1, -1, 140, -1,
+ 142, 1, 144, 3, 4, 5, 6, 7, -1, -1,
+ -1, 11, 12, -1, -1, -1, 16, -1, 18, 19,
+ 20, 21, 22, 23, 24, -1, -1, -1, -1, -1,
+ 30, 31, 32, 33, 34, 35, 36, -1, -1, 39,
+ -1, -1, -1, -1, -1, 45, 46, 47, 48, 49,
+ 50, 51, 52, 53, 54, 55, 56, 57, -1, 59,
+ 60, 61, 62, -1, 64, 65, 66, -1, 68, 69,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 88, -1,
+ -1, 91, 92, -1, 94, 95, -1, 97, -1, -1,
+ 100, 101, 102, 103, 104, 105, 106, 107, 108, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 129,
+ 130, 131, -1, -1, -1, -1, -1, -1, -1, -1,
+ 140, -1, 142, 1, 144, 3, 4, 5, 6, 7,
+ -1, -1, -1, 11, 12, -1, -1, -1, 16, -1,
+ 18, 19, 20, 21, 22, 23, 24, -1, -1, -1,
+ -1, -1, 30, 31, 32, 33, 34, 35, 36, -1,
+ -1, 39, -1, -1, -1, -1, -1, 45, 46, 47,
+ 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
+ -1, 59, 60, 61, 62, -1, 64, 65, 66, -1,
+ 68, 69, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 88, -1, -1, 91, 92, -1, 94, 95, -1, 97,
+ -1, -1, 100, 101, 102, 103, 104, 105, 106, 107,
+ 108, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 129, 130, 131, -1, -1, 134, 1, -1, 3,
+ 4, 5, 6, 7, 142, -1, 144, 11, 12, -1,
+ -1, -1, 16, -1, 18, 19, 20, 21, 22, 23,
+ 24, -1, -1, -1, -1, -1, 30, 31, 32, 33,
+ 34, 35, 36, -1, -1, 39, -1, -1, -1, -1,
+ -1, 45, 46, 47, 48, 49, 50, 51, 52, 53,
+ 54, 55, 56, 57, -1, 59, 60, 61, 62, -1,
+ 64, 65, 66, -1, 68, 69, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 88, -1, -1, 91, 92, -1,
+ 94, 95, -1, 97, -1, -1, 100, 101, 102, 103,
+ 104, 105, 106, 107, 108, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 129, 130, 131, -1, -1,
+ 134, -1, -1, -1, -1, -1, -1, -1, 142, 1,
+ 144, 3, 4, 5, 6, 7, -1, -1, 10, 11,
+ 12, -1, -1, -1, 16, -1, 18, 19, 20, 21,
+ 22, 23, 24, -1, -1, -1, -1, -1, 30, 31,
+ 32, 33, 34, 35, 36, -1, -1, 39, -1, -1,
+ -1, -1, -1, 45, 46, 47, 48, 49, 50, 51,
+ 52, 53, 54, 55, 56, 57, -1, 59, 60, 61,
+ 62, -1, 64, 65, 66, -1, 68, 69, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 88, -1, -1, 91,
+ 92, -1, 94, 95, -1, 97, -1, -1, 100, 101,
+ 102, 103, 104, 105, 106, 107, 108, -1, -1, -1,
+ -1, -1, -1, -1, -1, 1, -1, 3, 4, 5,
+ 6, 7, -1, -1, -1, 11, 12, 129, 130, 131,
+ 16, -1, 18, 19, 20, 21, 22, 23, 24, -1,
+ 142, -1, 144, -1, 30, 31, 32, 33, 34, 35,
+ 36, -1, -1, 39, -1, -1, -1, -1, -1, 45,
+ 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
+ 56, 57, -1, 59, 60, 61, 62, -1, 64, 65,
+ 66, -1, 68, 69, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 88, -1, -1, 91, 92, -1, 94, 95,
+ -1, 97, -1, -1, 100, 101, 102, 103, 104, 105,
+ 106, 107, 108, -1, 110, -1, -1, -1, -1, -1,
+ -1, -1, -1, 3, 4, 5, -1, 7, -1, -1,
+ -1, 11, 12, 129, 130, 131, 16, -1, 18, 19,
+ 20, 21, 22, 23, 24, -1, 142, -1, 144, -1,
+ 30, 31, 32, 33, 34, 35, 36, -1, -1, 39,
+ -1, -1, -1, -1, -1, -1, 46, -1, -1, 49,
+ 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
+ 60, 61, 62, -1, 64, 65, 66, -1, 68, 69,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 88, -1,
+ -1, 91, 92, -1, 94, 95, -1, 97, 98, 99,
+ 100, 101, 102, 103, 104, 105, 106, 107, 108, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 3,
+ 4, 5, -1, 7, -1, -1, -1, 11, 12, 129,
+ 130, 131, 16, -1, 18, 19, 20, 21, 22, 23,
+ 24, -1, -1, -1, 144, -1, 30, 31, 32, 33,
+ 34, 35, 36, -1, -1, 39, -1, -1, -1, -1,
+ -1, -1, 46, -1, -1, 49, 50, 51, 52, 53,
+ 54, 55, 56, 57, -1, 59, 60, 61, 62, -1,
+ 64, 65, 66, -1, 68, 69, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 88, -1, -1, 91, 92, -1,
+ 94, 95, -1, -1, -1, -1, 100, 101, 102, 103,
+ 104, 105, 106, 107, 108, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 3, 4, 5, -1, 7,
+ -1, -1, -1, 11, 12, 129, 130, 131, 16, -1,
+ 18, 19, 20, 21, 22, 23, 24, -1, 142, -1,
+ 144, -1, 30, 31, 32, 33, 34, 35, 36, -1,
+ -1, 39, -1, -1, -1, -1, -1, -1, 46, -1,
+ -1, 49, 50, 51, 52, 53, 54, 55, 56, 57,
+ -1, 59, 60, 61, 62, -1, 64, 65, 66, -1,
+ 68, 69, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 88, -1, -1, 91, 92, -1, 94, 95, -1, -1,
+ -1, -1, 100, 101, 102, 103, 104, 105, 106, 107,
+ 108, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 3, 4, 5, 6, 7, -1, -1, -1, 11,
+ 12, 129, 130, 131, 16, -1, 18, 19, 20, 21,
+ 22, 23, 24, -1, -1, -1, 144, -1, 30, 31,
+ 32, 33, 34, 35, 36, -1, -1, 39, -1, -1,
+ -1, -1, -1, 45, 46, 47, 48, 49, 50, 51,
+ 52, 53, 54, 55, 56, 57, -1, 59, 60, 61,
+ 62, -1, 64, 65, 66, -1, 68, 69, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 88, -1, -1, 91,
+ 92, -1, 94, 95, -1, 97, -1, -1, 100, 101,
+ 102, 103, 104, 105, 106, 107, 108, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 3, 4, 5,
+ 6, 7, -1, -1, -1, 11, 12, 129, 130, 131,
+ 16, -1, 18, 19, 20, 21, 22, 23, 24, -1,
+ 142, -1, -1, -1, 30, 31, 32, 33, 34, 35,
+ 36, -1, -1, 39, -1, -1, -1, -1, -1, 45,
+ 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
+ 56, 57, -1, 59, 60, 61, 62, -1, 64, 65,
+ 66, -1, 68, 69, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 88, -1, -1, 91, 92, -1, 94, 95,
+ -1, 97, -1, -1, 100, 101, 102, 103, 104, 105,
+ 106, 107, 108, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 129, 130, 131, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 142, 3, 4, 5,
+ 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
+ 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
+ 26, -1, -1, -1, 30, 31, 32, 33, 34, 35,
+ 36, 37, 38, 39, -1, -1, -1, -1, -1, 45,
+ 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
+ 56, 57, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 68, 69, 70, 71, 72, 73, 74, 75,
+ 76, -1, -1, 79, 80, -1, -1, 83, 84, 85,
+ 86, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 97, 98, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 119, 120, 121, 122, 123, 124, 125,
+ 126, 127, 128, -1, 130, 131, -1, -1, -1, -1,
+ -1, -1, 138, 139, 3, 4, 5, 6, 7, 8,
+ 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
+ 19, 20, 21, 22, 23, 24, 25, 26, -1, -1,
+ -1, 30, 31, 32, 33, 34, 35, 36, 37, 38,
+ 39, -1, -1, -1, -1, -1, 45, 46, 47, 48,
+ 49, 50, 51, 52, 53, 54, 55, 56, 57, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 68,
+ 69, 70, 71, 72, 73, 74, 75, 76, -1, -1,
+ 79, 80, -1, -1, 83, 84, 85, 86, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 97, 98,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 119, 120, 121, 122, 123, 124, 125, 126, 127, 128,
+ -1, 130, 131, -1, -1, -1, -1, -1, -1, 138,
+ 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
+ 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
+ 23, 24, 25, 26, -1, -1, -1, 30, 31, 32,
+ 33, 34, 35, 36, 37, 38, 39, -1, -1, -1,
+ -1, -1, 45, 46, 47, 48, 49, 50, 51, 52,
+ 53, 54, -1, 56, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 68, 69, 70, 71, 72,
+ 73, 74, 75, 76, -1, -1, 79, 80, -1, -1,
+ 83, 84, 85, 86, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 97, 98, -1, -1, 101, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 119, 120, 121, 122,
+ 123, 124, 125, 126, 127, 128, -1, 130, 131, -1,
+ -1, -1, -1, -1, -1, 138, 3, 4, 5, 6,
+ 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
+ 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
+ -1, -1, -1, 30, 31, 32, 33, 34, 35, 36,
+ 37, 38, 39, -1, -1, -1, -1, -1, 45, 46,
+ 47, 48, 49, 50, 51, 52, 53, -1, -1, 56,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 68, 69, 70, 71, 72, 73, 74, 75, 76,
+ -1, -1, 79, 80, -1, -1, 83, 84, 85, 86,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 97, 98, -1, -1, 101, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 119, 120, 121, 122, 123, 124, 125, 126,
+ 127, 128, -1, 130, 131, -1, -1, -1, -1, -1,
+ -1, 138, 3, 4, 5, 6, 7, 8, 9, 10,
+ 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
+ 21, 22, 23, 24, 25, 26, -1, -1, -1, 30,
+ 31, 32, 33, 34, 35, 36, 37, 38, 39, -1,
+ -1, -1, -1, -1, 45, 46, 47, 48, 49, 50,
+ 51, 52, 53, -1, -1, 56, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 68, 69, 70,
+ 71, 72, 73, 74, 75, 76, -1, -1, 79, 80,
+ -1, -1, 83, 84, 85, 86, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 97, 98, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 119, 120,
+ 121, 122, 123, 124, 125, 126, 127, 128, -1, 130,
+ 131, 3, 4, 5, -1, 7, -1, 138, -1, 11,
+ 12, -1, -1, -1, 16, -1, 18, 19, 20, 21,
+ 22, 23, 24, -1, -1, -1, -1, -1, 30, 31,
+ 32, 33, 34, 35, 36, -1, -1, 39, -1, -1,
+ -1, -1, -1, -1, 46, -1, -1, 49, 50, 51,
+ 52, 53, 54, 55, 56, 57, -1, 59, 60, 61,
+ 62, -1, 64, 65, 66, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 88, -1, -1, 91,
+ 92, -1, 94, 95, -1, -1, -1, -1, 100, 101,
+ 102, 103, 104, 105, 106, 107, 108, -1, -1, -1,
+ -1, -1, -1, 3, 4, 5, -1, 7, -1, -1,
+ -1, 11, 12, -1, -1, -1, 16, 129, 18, 19,
+ 20, 21, 22, 23, 24, 137, -1, -1, -1, -1,
+ 30, 31, 32, 33, 34, 35, 36, -1, -1, 39,
+ -1, -1, -1, -1, -1, -1, 46, -1, -1, 49,
+ 50, 51, 52, 53, 54, 55, 56, 57, -1, 59,
+ 60, 61, 62, -1, 64, 65, 66, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 88, -1,
+ -1, 91, 92, -1, 94, 95, -1, -1, -1, -1,
+ 100, 101, 102, 103, 104, 105, 106, 107, 108, -1,
+ -1, -1, -1, -1, -1, 3, 4, 5, 6, 7,
+ -1, -1, -1, 11, 12, -1, -1, -1, 16, 129,
+ 18, 19, 20, 21, 22, 23, 24, 137, -1, -1,
+ -1, -1, 30, 31, 32, 33, 34, 35, 36, -1,
+ -1, 39, -1, -1, -1, -1, -1, 45, 46, 47,
+ 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
+ -1, 59, 60, 61, 62, -1, 64, 65, 66, -1,
+ 68, 69, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 88, -1, -1, 91, 92, -1, 94, 95, -1, 97,
+ -1, -1, 100, 101, 102, 103, 104, 105, 106, 107,
+ 108, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 3, 4, 5, -1, 7, -1, -1, -1, 11,
+ 12, 129, 130, 131, 16, -1, 18, 19, 20, 21,
+ 22, 23, 24, -1, -1, -1, -1, -1, 30, 31,
+ 32, 33, 34, 35, 36, -1, -1, 39, -1, -1,
+ -1, -1, -1, -1, 46, -1, -1, 49, 50, 51,
+ 52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
+ 62, -1, 64, 65, 66, -1, 68, 69, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 88, -1, -1, 91,
+ 92, -1, 94, 95, -1, 97, 98, 99, 100, 101,
+ 102, 103, 104, 105, 106, 107, 108, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 3, 4, 5,
+ 6, 7, -1, -1, -1, 11, 12, 129, 130, 131,
+ 16, -1, 18, 19, 20, 21, 22, 23, 24, -1,
+ -1, -1, -1, -1, 30, 31, 32, 33, 34, 35,
+ 36, -1, -1, 39, -1, -1, -1, -1, -1, 45,
+ 46, -1, 48, 49, 50, 51, 52, 53, 54, 55,
+ 56, 57, -1, 59, 60, 61, 62, -1, 64, 65,
+ 66, -1, 68, 69, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 88, -1, -1, 91, 92, -1, 94, 95,
+ -1, 97, -1, -1, 100, 101, 102, 103, 104, 105,
+ 106, 107, 108, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 3, 4, 5, -1, 7, -1, -1,
+ -1, 11, 12, 129, 130, 131, 16, -1, 18, 19,
+ 20, 21, 22, 23, 24, -1, -1, -1, -1, -1,
+ 30, 31, 32, 33, 34, 35, 36, -1, -1, 39,
+ -1, -1, -1, -1, -1, -1, 46, -1, -1, 49,
+ 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
+ 60, 61, 62, -1, 64, 65, 66, -1, 68, 69,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 88, -1,
+ -1, 91, 92, -1, 94, 95, -1, 97, 98, 99,
+ 100, 101, 102, 103, 104, 105, 106, 107, 108, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 3,
+ 4, 5, -1, 7, -1, -1, -1, 11, 12, 129,
+ 130, 131, 16, -1, 18, 19, 20, 21, 22, 23,
+ 24, -1, -1, -1, -1, -1, 30, 31, 32, 33,
+ 34, 35, 36, -1, -1, 39, -1, -1, -1, -1,
+ -1, -1, 46, -1, -1, 49, 50, 51, 52, 53,
+ 54, 55, 56, 57, 58, 59, 60, 61, 62, -1,
+ 64, 65, 66, -1, 68, 69, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 88, -1, -1, 91, 92, -1,
+ 94, 95, -1, 97, 98, -1, 100, 101, 102, 103,
+ 104, 105, 106, 107, 108, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 3, 4, 5, -1, 7,
+ -1, -1, -1, 11, 12, 129, 130, 131, 16, -1,
+ 18, 19, 20, 21, 22, 23, 24, -1, -1, -1,
+ -1, -1, 30, 31, 32, 33, 34, 35, 36, -1,
+ -1, 39, -1, -1, -1, -1, -1, -1, 46, -1,
+ -1, 49, 50, 51, 52, 53, 54, 55, 56, 57,
+ 58, 59, 60, 61, 62, -1, 64, 65, 66, -1,
+ 68, 69, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 88, -1, -1, 91, 92, -1, 94, 95, -1, -1,
+ 98, 99, 100, 101, 102, 103, 104, 105, 106, 107,
+ 108, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 3, 4, 5, -1, 7, -1, -1, -1, 11,
+ 12, 129, 130, 131, 16, -1, 18, 19, 20, 21,
+ 22, 23, 24, -1, -1, -1, -1, -1, 30, 31,
+ 32, 33, 34, 35, 36, -1, -1, 39, -1, -1,
+ -1, -1, -1, -1, 46, -1, -1, 49, 50, 51,
+ 52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
+ 62, -1, 64, 65, 66, -1, 68, 69, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 88, -1, -1, 91,
+ 92, -1, 94, 95, -1, 97, 98, -1, 100, 101,
+ 102, 103, 104, 105, 106, 107, 108, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 3, 4, 5,
+ -1, 7, -1, -1, -1, 11, 12, 129, 130, 131,
+ 16, -1, 18, 19, 20, 21, 22, 23, 24, -1,
+ -1, -1, -1, -1, 30, 31, 32, 33, 34, 35,
+ 36, -1, -1, 39, -1, -1, -1, -1, -1, -1,
+ 46, -1, -1, 49, 50, 51, 52, 53, 54, 55,
+ 56, 57, 58, 59, 60, 61, 62, -1, 64, 65,
+ 66, -1, 68, 69, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 88, -1, -1, 91, 92, -1, 94, 95,
+ -1, -1, 98, -1, 100, 101, 102, 103, 104, 105,
+ 106, 107, 108, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 3, 4, 5, -1, 7, -1, -1,
+ -1, 11, 12, 129, 130, 131, 16, -1, 18, 19,
+ 20, 21, 22, 23, 24, -1, -1, -1, -1, -1,
+ 30, 31, 32, 33, 34, 35, 36, -1, -1, 39,
+ -1, -1, -1, -1, -1, -1, 46, -1, -1, 49,
+ 50, 51, 52, 53, 54, 55, 56, 57, -1, 59,
+ 60, 61, 62, -1, 64, 65, 66, -1, 68, 69,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 88, -1,
+ -1, 91, 92, -1, 94, 95, -1, 97, -1, -1,
+ 100, 101, 102, 103, 104, 105, 106, 107, 108, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 3,
+ 4, 5, -1, 7, -1, -1, -1, 11, 12, 129,
+ 130, 131, 16, -1, 18, 19, 20, 21, 22, 23,
+ 24, -1, -1, -1, -1, -1, 30, 31, 32, 33,
+ 34, 35, 36, -1, -1, 39, -1, -1, -1, -1,
+ -1, -1, 46, -1, -1, 49, 50, 51, 52, 53,
+ 54, 55, 56, 57, -1, 59, 60, 61, 62, -1,
+ 64, 65, 66, -1, 68, 69, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 88, -1, -1, 91, 92, -1,
+ 94, 95, -1, 97, -1, -1, 100, 101, 102, 103,
+ 104, 105, 106, 107, 108, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 3, 4, 5, -1, 7,
+ -1, -1, -1, 11, 12, 129, 130, 131, 16, -1,
+ 18, 19, 20, 21, 22, 23, 24, -1, -1, -1,
+ -1, -1, 30, 31, 32, 33, 34, 35, 36, -1,
+ -1, 39, -1, -1, -1, -1, -1, -1, 46, -1,
+ -1, 49, 50, 51, 52, 53, 54, 55, 56, 57,
+ -1, 59, 60, 61, 62, -1, 64, 65, 66, -1,
+ 68, 69, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 88, -1, -1, 91, 92, -1, 94, 95, -1, 97,
+ -1, -1, 100, 101, 102, 103, 104, 105, 106, 107,
+ 108, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 3, 4, 5, -1, 7, -1, -1, -1, 11,
+ 12, 129, 130, 131, 16, -1, 18, 19, 20, 21,
+ 22, 23, 24, -1, -1, -1, -1, -1, 30, 31,
+ 32, 33, 34, 35, 36, -1, -1, 39, -1, -1,
+ -1, -1, -1, -1, 46, -1, -1, 49, 50, 51,
+ 52, 53, 54, 55, 56, 57, -1, 59, 60, 61,
+ 62, -1, 64, 65, 66, -1, 68, 69, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 88, -1, -1, 91,
+ 92, -1, 94, 95, -1, 97, -1, -1, 100, 101,
+ 102, 103, 104, 105, 106, 107, 108, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 3, 4, 5,
+ -1, 7, -1, -1, -1, 11, 12, 129, 130, 131,
+ 16, -1, 18, 19, 20, 21, 22, 23, 24, -1,
+ -1, -1, -1, -1, 30, 31, 32, 33, 34, 35,
+ 36, -1, -1, 39, -1, -1, -1, -1, -1, -1,
+ 46, -1, -1, 49, 50, 51, 52, 53, 54, 55,
+ 56, 57, -1, 59, 60, 61, 62, -1, 64, 65,
+ 66, -1, 68, 69, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 88, -1, -1, 91, 92, -1, 94, 95,
+ -1, 97, -1, -1, 100, 101, 102, 103, 104, 105,
+ 106, 107, 108, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 3, 4, 5, -1, 7, -1, -1,
+ -1, 11, 12, 129, 130, 131, 16, -1, 18, 19,
+ 20, 21, 22, 23, 24, -1, -1, -1, -1, -1,
+ 30, 31, 32, 33, 34, 35, 36, -1, -1, 39,
+ -1, -1, -1, -1, -1, -1, 46, -1, -1, 49,
+ 50, 51, 52, 53, 54, 55, 56, 57, -1, 59,
+ 60, 61, 62, -1, 64, 65, 66, -1, 68, 69,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 88, -1,
+ -1, 91, 92, -1, 94, 95, -1, -1, -1, -1,
+ 100, 101, 102, 103, 104, 105, 106, 107, 108, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 3,
+ 4, 5, -1, 7, -1, -1, -1, 11, 12, 129,
+ 130, 131, 16, -1, 18, 19, 20, 21, 22, 23,
+ 24, -1, -1, -1, -1, -1, 30, 31, 32, 33,
+ 34, 35, 36, -1, -1, 39, -1, -1, -1, -1,
+ -1, -1, 46, -1, -1, 49, 50, 51, 52, 53,
+ 54, 55, 56, 57, -1, 59, 60, 61, 62, -1,
+ 64, 65, 66, -1, 68, 69, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 88, -1, -1, 91, 92, -1,
+ 94, 95, -1, -1, -1, -1, 100, 101, 102, 103,
+ 104, 105, 106, 107, 108, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 3, 4, 5, -1, 7,
+ -1, -1, -1, 11, 12, 129, 130, 131, 16, -1,
+ 18, 19, 20, 21, 22, 23, 24, -1, -1, -1,
+ -1, -1, 30, 31, 32, 33, 34, 35, 36, -1,
+ -1, 39, -1, -1, -1, -1, -1, -1, 46, -1,
+ -1, 49, 50, 51, 52, 53, 54, 55, 56, 57,
+ -1, 59, 60, 61, 62, -1, 64, 65, 66, -1,
+ 68, 69, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 88, -1, -1, 91, 92, -1, 94, 95, -1, -1,
+ -1, -1, 100, 101, 102, 103, 104, 105, 106, 107,
+ 108, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 3, 4, 5, -1, 7, -1, -1, -1, 11,
+ 12, 129, 130, 131, 16, -1, 18, 19, 20, 21,
+ 22, 23, 24, -1, -1, -1, -1, -1, 30, 31,
+ 32, 33, 34, 35, 36, -1, -1, 39, -1, -1,
+ -1, -1, -1, -1, 46, -1, -1, 49, 50, 51,
+ 52, 53, 54, 55, 56, 57, -1, 59, 60, 61,
+ 62, -1, 64, 65, 66, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 88, -1, -1, 91,
+ 92, -1, 94, 95, -1, 97, -1, -1, 100, 101,
+ 102, 103, 104, 105, 106, 107, 108, -1, -1, -1,
+ -1, -1, -1, 3, 4, 5, -1, 7, -1, -1,
+ -1, 11, 12, -1, -1, -1, 16, 129, 18, 19,
+ 20, 21, 22, 23, 24, -1, -1, -1, -1, -1,
+ 30, 31, 32, 33, 34, 35, 36, -1, -1, 39,
+ -1, -1, -1, -1, -1, -1, 46, -1, -1, 49,
+ 50, 51, 52, 53, 54, 55, 56, 57, -1, 59,
+ 60, 61, 62, -1, 64, 65, 66, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 88, -1,
+ -1, 91, 92, -1, 94, 95, -1, 97, -1, -1,
+ 100, 101, 102, 103, 104, 105, 106, 107, 108, -1,
+ -1, -1, -1, -1, -1, 3, 4, 5, -1, 7,
+ -1, -1, -1, 11, 12, -1, -1, -1, 16, 129,
+ 18, 19, 20, 21, 22, 23, 24, -1, -1, -1,
+ -1, -1, 30, 31, 32, 33, 34, 35, 36, -1,
+ -1, 39, -1, -1, -1, -1, -1, -1, 46, -1,
+ -1, 49, 50, 51, 52, 53, 54, 55, 56, 57,
+ -1, 59, 60, 61, 62, -1, 64, 65, 66, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 85, -1, -1,
+ 88, -1, -1, 91, 92, -1, 94, 95, -1, -1,
+ -1, -1, 100, 101, 102, 103, 104, 105, 106, 107,
+ 108, -1, -1, -1, -1, -1, -1, 3, 4, 5,
+ -1, 7, -1, -1, -1, 11, 12, -1, -1, -1,
+ 16, 129, 18, 19, 20, 21, 22, 23, 24, -1,
+ -1, -1, -1, -1, 30, 31, 32, 33, 34, 35,
+ 36, -1, -1, 39, -1, -1, -1, -1, -1, -1,
+ 46, -1, -1, 49, 50, 51, 52, 53, 54, 55,
+ 56, 57, -1, 59, 60, 61, 62, -1, 64, 65,
+ 66, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 88, -1, -1, 91, 92, -1, 94, 95,
+ -1, -1, -1, -1, 100, 101, 102, 103, 104, 105,
+ 106, 107, 108, -1, -1, -1, -1, -1, -1, 3,
+ 4, 5, -1, 7, -1, -1, -1, 11, 12, -1,
+ -1, -1, 16, 129, 18, 19, 20, 21, 22, 23,
+ 24, -1, -1, -1, -1, -1, 30, 31, 32, 33,
+ 34, 35, 36, -1, -1, 39, -1, -1, -1, -1,
+ -1, -1, 46, -1, -1, 49, 50, 51, 52, 53,
+ 54, 55, 56, 57, -1, 59, 60, 61, 62, -1,
+ 64, 65, 66, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 88, -1, -1, 91, 92, -1,
+ 94, 95, -1, -1, -1, -1, 100, 101, 102, 103,
+ 104, 105, 106, 107, 108, -1, -1, -1, -1, -1,
+ -1, 3, 4, 5, -1, 7, -1, -1, -1, 11,
+ 12, -1, -1, -1, 16, 129, 18, 19, 20, 21,
+ 22, 23, 24, -1, -1, -1, -1, -1, 30, 31,
+ 32, 33, 34, 35, 36, -1, -1, 39, -1, -1,
+ -1, -1, -1, -1, 46, -1, -1, 49, 50, 51,
+ 52, 53, 54, 55, 56, 57, -1, 59, 60, 61,
+ 62, -1, 64, 65, 66, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 88, -1, -1, 91,
+ 92, -1, 94, 95, -1, -1, -1, -1, 100, 101,
+ 102, 103, 104, 105, 106, 107, 108, -1, -1, -1,
+ -1, -1, -1, 3, 4, 5, -1, 7, -1, -1,
+ -1, 11, 12, -1, -1, -1, 16, 129, 18, 19,
+ 20, 21, 22, 23, 24, -1, -1, -1, -1, -1,
+ 30, 31, 32, 33, 34, 35, 36, -1, -1, 39,
+ -1, -1, -1, -1, -1, -1, 46, -1, -1, 49,
+ 50, 51, 52, 53, 54, 55, 56, 57, -1, 59,
+ 60, 61, 62, -1, 64, 65, 66, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 88, -1,
+ -1, 91, 92, -1, 94, 95, -1, -1, -1, -1,
+ 100, 101, 102, 103, 104, 105, 106, 107, 108, -1,
+ -1, -1, -1, -1, 52, 53, -1, -1, 56, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 129,
+ 68, 69, 70, 71, 72, 73, 74, 75, 76, -1,
+ -1, 79, 80, -1, -1, 83, 84, 85, 86, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 97,
+ 98, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 119, 120, 121, 122, 123, 124, 125, 126, 127,
+ 128, -1, 130, 131, 52, 53, -1, -1, 56, -1,
+ 138, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 68, 69, 70, 71, 72, 73, 74, 75, 76, -1,
+ -1, 79, 80, -1, -1, 83, 84, 85, 86, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 97,
+ 98, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 119, 120, 121, 122, 123, 124, 125, 126, 127,
+ 128, -1, 130, 131, 52, 53, -1, -1, 56, -1,
+ 138, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 68, 69, 70, 71, 72, 73, 74, 75, 76, -1,
+ -1, 79, 80, -1, -1, 83, 84, 85, 86, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 97,
+ 98, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 119, 120, 121, 122, 123, 124, 125, 126, 127,
+ 128, -1, 130, 131, 52, 53, -1, -1, 56, -1,
+ 138, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 68, 69, 70, 71, 72, 73, 74, 75, 76, -1,
+ -1, 79, 80, -1, -1, 83, 84, 85, 86, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 97,
+ 98, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 119, 120, 121, 122, 123, 124, 125, 126, 127,
+ 128, -1, 130, 131, 52, 53, -1, -1, 56, -1,
+ 138, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 68, 69, 70, 71, 72, 73, 74, 75, 76, -1,
+ -1, 79, 80, -1, -1, 83, 84, 85, 86, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 97,
+ 98, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 119, 120, 121, 122, 123, 124, 125, 126, 127,
+ 128, -1, 130, 131, 52, 53, -1, -1, 56, -1,
+ 138, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 68, 69, 70, 71, 72, 73, 74, 75, 76, -1,
+ -1, 79, 80, -1, -1, 83, 84, 85, 86, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 97,
+ 98, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 119, 120, 121, 122, 123, 124, 125, 126, 127,
+ 128, -1, 130, 131, 52, 53, -1, -1, 56, -1,
+ 138, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 68, 69, 70, 71, 72, 73, 74, 75, 76, -1,
+ -1, 79, 80, -1, -1, 83, 84, 85, 86, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 97,
+ 98, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 119, 120, 121, 122, 123, 124, 125, 126, 127,
+ 128, -1, 130, 131, 52, 53, -1, -1, 56, -1,
+ 138, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 68, 69, 70, 71, 72, 73, 74, 75, 76, -1,
+ -1, 79, 80, -1, -1, 83, 84, 85, 86, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 97,
+ 98, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 119, 120, 121, 122, 123, 124, 125, 126, 127,
+ 128, -1, 130, 131, 52, 53, -1, -1, 56, -1,
+ 138, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 68, 69, 70, 71, 72, 73, 74, 75, 76, -1,
+ -1, 79, 80, -1, -1, 83, 84, 85, 86, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 97,
+ 98, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 119, 120, 121, 122, 123, 124, 125, 126, 127,
+ 128, -1, 130, 131, 52, 53, -1, -1, 56, -1,
+ 138, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 68, 69, 70, 71, 72, 73, 74, 75, 76, -1,
+ -1, 79, 80, -1, -1, 83, 84, 85, 86, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 97,
+ 98, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 119, 120, 121, 122, 123, 124, 125, 126, 127,
+ 128, -1, 130, 131, 52, 53, -1, -1, 56, -1,
+ 138, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 68, 69, 70, 71, 72, 73, 74, 75, 76, -1,
+ -1, 79, 80, -1, -1, 83, 84, 85, 86, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 97,
+ 98, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 119, 120, 121, 122, 123, 124, 125, 126, 127,
+ 128, -1, 130, 131, 52, 53, -1, -1, 56, -1,
+ 138, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 68, 69, 70, 71, 72, 73, 74, 75, 76, -1,
+ -1, 79, 80, -1, -1, 83, 84, 85, 86, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 97,
+ 98, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 119, 120, 121, 122, 123, 124, 125, 126, 127,
+ 128, -1, 130, 131, 52, 53, -1, -1, 56, -1,
+ 138, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 68, 69, 70, 71, 72, 73, 74, 75, 76, -1,
+ -1, 79, 80, -1, -1, 83, 84, 85, 86, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 97,
+ 98, 70, 71, 72, 73, 74, 75, 76, 77, 78,
+ 79, 80, 81, 82, -1, -1, 85, 86, -1, -1,
+ -1, 119, 120, 121, 122, 123, 124, 125, 126, 127,
+ 128, -1, 130, 131, -1, -1, -1, -1, -1, -1,
+ 138, -1, -1, -1, -1, -1, -1, -1, 117, -1,
+ 119, 120, 121, 122, 123, 124, 125, 126, 127, 128,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 144
+};
+
+/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+ symbol of state STATE-NUM. */
+static const yytype_uint16 yystos[] =
+{
+ 0, 146, 147, 0, 1, 3, 4, 5, 6, 7,
+ 11, 12, 16, 18, 19, 20, 21, 22, 23, 24,
+ 30, 31, 32, 33, 34, 35, 36, 39, 45, 46,
+ 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
+ 57, 59, 60, 61, 62, 64, 65, 66, 68, 69,
+ 88, 91, 92, 94, 95, 97, 100, 101, 102, 103,
+ 104, 105, 106, 107, 108, 129, 130, 131, 148, 149,
+ 150, 157, 159, 160, 162, 163, 166, 167, 168, 170,
+ 171, 172, 174, 175, 185, 202, 221, 222, 223, 224,
+ 225, 226, 227, 228, 229, 230, 231, 258, 259, 273,
+ 274, 275, 276, 277, 278, 279, 282, 284, 285, 298,
+ 300, 301, 302, 303, 304, 305, 306, 307, 341, 352,
+ 150, 3, 4, 5, 6, 7, 8, 9, 10, 11,
+ 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
+ 22, 23, 24, 25, 26, 30, 31, 32, 33, 34,
+ 35, 36, 37, 38, 39, 45, 46, 47, 48, 49,
+ 50, 51, 52, 53, 56, 68, 69, 70, 71, 72,
+ 73, 74, 75, 76, 79, 80, 83, 84, 85, 86,
+ 97, 98, 119, 120, 121, 122, 123, 124, 125, 126,
+ 127, 128, 130, 131, 138, 178, 179, 180, 181, 183,
+ 184, 298, 300, 39, 58, 88, 91, 97, 98, 99,
+ 102, 130, 167, 175, 185, 189, 194, 197, 199, 221,
+ 303, 304, 306, 307, 339, 340, 194, 194, 139, 195,
+ 196, 139, 191, 195, 139, 144, 346, 54, 180, 346,
+ 151, 133, 21, 22, 30, 31, 32, 166, 185, 221,
+ 185, 56, 1, 47, 91, 153, 154, 155, 157, 169,
+ 170, 352, 204, 205, 190, 199, 339, 352, 189, 338,
+ 339, 352, 46, 88, 129, 137, 174, 202, 221, 303,
+ 304, 307, 249, 250, 54, 55, 57, 178, 289, 299,
+ 288, 289, 290, 143, 280, 143, 286, 143, 283, 143,
+ 287, 302, 162, 185, 185, 142, 144, 345, 350, 351,
+ 40, 41, 42, 43, 44, 37, 38, 26, 133, 191,
+ 195, 264, 28, 256, 116, 137, 91, 97, 171, 116,
+ 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
+ 80, 81, 82, 85, 86, 117, 119, 120, 121, 122,
+ 123, 124, 125, 126, 127, 128, 87, 135, 136, 203,
+ 160, 161, 161, 208, 210, 161, 345, 351, 88, 168,
+ 175, 221, 237, 303, 304, 307, 52, 56, 85, 88,
+ 176, 177, 221, 303, 304, 307, 177, 33, 34, 35,
+ 36, 49, 50, 51, 52, 56, 139, 178, 305, 336,
+ 87, 136, 344, 264, 276, 89, 89, 137, 189, 56,
+ 189, 189, 189, 288, 116, 90, 137, 198, 352, 87,
+ 135, 136, 89, 89, 137, 198, 194, 346, 347, 194,
+ 193, 194, 199, 339, 352, 160, 347, 160, 54, 65,
+ 66, 158, 139, 186, 133, 153, 87, 136, 89, 157,
+ 156, 169, 140, 345, 351, 347, 347, 160, 141, 137,
+ 144, 349, 137, 349, 134, 349, 346, 56, 302, 171,
+ 173, 137, 87, 135, 136, 251, 63, 109, 111, 112,
+ 291, 112, 291, 112, 67, 291, 112, 112, 281, 291,
+ 112, 63, 112, 112, 112, 281, 112, 63, 112, 70,
+ 142, 150, 161, 161, 161, 161, 157, 160, 160, 266,
+ 265, 96, 164, 257, 97, 162, 189, 199, 200, 201,
+ 169, 137, 174, 137, 159, 162, 175, 185, 189, 201,
+ 185, 185, 185, 185, 185, 185, 185, 185, 185, 185,
+ 185, 185, 185, 185, 185, 187, 185, 185, 185, 185,
+ 185, 185, 185, 185, 185, 185, 52, 53, 56, 183,
+ 263, 342, 343, 193, 52, 53, 56, 183, 262, 342,
+ 152, 153, 13, 233, 350, 233, 161, 161, 345, 17,
+ 267, 56, 87, 135, 136, 25, 160, 52, 56, 176,
+ 1, 120, 308, 350, 87, 135, 136, 217, 337, 218,
+ 344, 52, 56, 342, 162, 185, 162, 185, 182, 114,
+ 185, 189, 97, 189, 197, 339, 52, 56, 193, 52,
+ 56, 340, 347, 140, 347, 137, 137, 347, 180, 207,
+ 185, 148, 134, 342, 342, 185, 133, 347, 155, 206,
+ 339, 137, 173, 52, 56, 193, 52, 56, 52, 54,
+ 55, 56, 57, 58, 70, 91, 97, 98, 99, 123,
+ 126, 139, 254, 312, 314, 315, 316, 317, 318, 319,
+ 320, 321, 324, 325, 326, 327, 330, 331, 332, 333,
+ 334, 293, 292, 143, 291, 143, 143, 143, 185, 78,
+ 121, 244, 245, 352, 244, 165, 244, 189, 137, 347,
+ 173, 137, 116, 44, 185, 89, 89, 191, 195, 261,
+ 346, 348, 89, 89, 191, 195, 260, 10, 232, 8,
+ 269, 352, 153, 13, 153, 27, 234, 350, 234, 267,
+ 199, 232, 52, 56, 193, 52, 56, 212, 215, 350,
+ 309, 214, 52, 56, 176, 193, 152, 160, 139, 310,
+ 311, 219, 191, 192, 195, 352, 44, 180, 189, 189,
+ 198, 89, 89, 348, 89, 89, 339, 160, 134, 148,
+ 347, 349, 171, 348, 91, 97, 238, 239, 240, 316,
+ 314, 252, 116, 137, 313, 189, 137, 335, 352, 52,
+ 137, 335, 137, 313, 52, 137, 313, 52, 294, 54,
+ 55, 57, 297, 307, 241, 243, 246, 317, 319, 320,
+ 322, 323, 326, 328, 329, 332, 334, 346, 153, 153,
+ 244, 153, 97, 189, 173, 185, 346, 162, 185, 162,
+ 185, 164, 191, 141, 89, 162, 185, 162, 185, 164,
+ 192, 189, 201, 270, 352, 15, 236, 352, 14, 235,
+ 236, 236, 209, 211, 232, 137, 233, 348, 161, 350,
+ 161, 152, 348, 232, 347, 314, 152, 314, 178, 264,
+ 256, 185, 89, 137, 347, 134, 240, 137, 316, 137,
+ 347, 246, 253, 189, 312, 318, 330, 332, 321, 326,
+ 334, 319, 327, 332, 317, 319, 295, 246, 121, 116,
+ 137, 242, 88, 221, 137, 335, 335, 137, 242, 137,
+ 242, 142, 10, 134, 153, 10, 189, 118, 162, 185,
+ 90, 271, 352, 153, 9, 272, 352, 161, 232, 232,
+ 153, 153, 189, 153, 234, 216, 350, 232, 347, 232,
+ 350, 220, 347, 239, 137, 97, 238, 140, 29, 113,
+ 255, 137, 313, 137, 313, 335, 137, 313, 137, 313,
+ 313, 296, 121, 221, 241, 329, 332, 56, 87, 322,
+ 326, 319, 328, 332, 319, 52, 247, 248, 315, 134,
+ 188, 88, 175, 221, 303, 304, 307, 233, 153, 233,
+ 232, 232, 236, 267, 268, 213, 152, 310, 137, 239,
+ 137, 316, 153, 153, 319, 332, 319, 319, 153, 137,
+ 242, 137, 242, 52, 56, 335, 137, 242, 137, 242,
+ 242, 137, 346, 185, 56, 87, 135, 136, 153, 153,
+ 153, 232, 152, 239, 137, 10, 134, 313, 137, 313,
+ 313, 313, 110, 319, 332, 319, 319, 248, 52, 56,
+ 193, 52, 56, 269, 235, 232, 232, 239, 319, 242,
+ 137, 242, 242, 242, 348, 313, 319, 242
+};
+
+#define yyerrok (yyerrstatus = 0)
+#define yyclearin (yychar = YYEMPTY)
+#define YYEMPTY (-2)
+#define YYEOF 0
+
+#define YYACCEPT goto yyacceptlab
+#define YYABORT goto yyabortlab
+#define YYERROR goto yyerrorlab
+
+
+/* Like YYERROR except do call yyerror. This remains here temporarily
+ to ease the transition to the new meaning of YYERROR, for GCC.
+ Once GCC version 2 has supplanted version 1, this can go. However,
+ YYFAIL appears to be in use. Nevertheless, it is formally deprecated
+ in Bison 2.4.2's NEWS entry, where a plan to phase it out is
+ discussed. */
+
+#define YYFAIL goto yyerrlab
+#if defined YYFAIL
+ /* This is here to suppress warnings from the GCC cpp's
+ -Wunused-macros. Normally we don't worry about that warning, but
+ some users do, and we want to make it easy for users to remove
+ YYFAIL uses, which will produce warnings from Bison 2.5. */
+#endif
+
+#define YYRECOVERING() (!!yyerrstatus)
+
+#define YYBACKUP(Token, Value) \
+do \
+ if (yychar == YYEMPTY && yylen == 1) \
+ { \
+ yychar = (Token); \
+ yylval = (Value); \
+ YYPOPSTACK (1); \
+ goto yybackup; \
+ } \
+ else \
+ { \
+ parser_yyerror (parser, YY_("syntax error: cannot back up")); \
+ YYERROR; \
+ } \
+while (YYID (0))
+
+
+#define YYTERROR 1
+#define YYERRCODE 256
+
+
+/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
+ If N is 0, then set CURRENT to the empty location which ends
+ the previous symbol: RHS[0] (always defined). */
+
+#define YYRHSLOC(Rhs, K) ((Rhs)[K])
+#ifndef YYLLOC_DEFAULT
+# define YYLLOC_DEFAULT(Current, Rhs, N) \
+ do \
+ if (YYID (N)) \
+ { \
+ (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \
+ (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \
+ (Current).last_line = YYRHSLOC (Rhs, N).last_line; \
+ (Current).last_column = YYRHSLOC (Rhs, N).last_column; \
+ } \
+ else \
+ { \
+ (Current).first_line = (Current).last_line = \
+ YYRHSLOC (Rhs, 0).last_line; \
+ (Current).first_column = (Current).last_column = \
+ YYRHSLOC (Rhs, 0).last_column; \
+ } \
+ while (YYID (0))
+#endif
+
+
+/* This macro is provided for backward compatibility. */
+
+#ifndef YY_LOCATION_PRINT
+# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
+#endif
+
+
+/* YYLEX -- calling `yylex' with the right arguments. */
+
+#ifdef YYLEX_PARAM
+# define YYLEX yylex (&yylval, YYLEX_PARAM)
+#else
+# define YYLEX yylex (&yylval, parser)
+#endif
+
+/* Enable debugging if requested. */
+#if YYDEBUG
+
+# ifndef YYFPRINTF
+# include <stdio.h> /* INFRINGES ON USER NAME SPACE */
+# define YYFPRINTF fprintf
+# endif
+
+# define YYDPRINTF(Args) \
+do { \
+ if (yydebug) \
+ YYFPRINTF Args; \
+} while (YYID (0))
+
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
+do { \
+ if (yydebug) \
+ { \
+ YYFPRINTF (stderr, "%s ", Title); \
+ yy_symbol_print (stderr, \
+ Type, Value, parser); \
+ YYFPRINTF (stderr, "\n"); \
+ } \
+} while (YYID (0))
+
+
+/*--------------------------------.
+| Print this symbol on YYOUTPUT. |
+`--------------------------------*/
+
+/*ARGSUSED*/
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static void
+yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, struct parser_params *parser)
+#else
+static void
+yy_symbol_value_print (yyoutput, yytype, yyvaluep, parser)
+ FILE *yyoutput;
+ int yytype;
+ YYSTYPE const * const yyvaluep;
+ struct parser_params *parser;
+#endif
+{
+ if (!yyvaluep)
+ return;
+ YYUSE (parser);
+# ifdef YYPRINT
+ if (yytype < YYNTOKENS)
+ YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
+# else
+ YYUSE (yyoutput);
+# endif
+ switch (yytype)
+ {
+ default:
+ break;
+ }
+}
+
+
+/*--------------------------------.
+| Print this symbol on YYOUTPUT. |
+`--------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static void
+yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, struct parser_params *parser)
+#else
+static void
+yy_symbol_print (yyoutput, yytype, yyvaluep, parser)
+ FILE *yyoutput;
+ int yytype;
+ YYSTYPE const * const yyvaluep;
+ struct parser_params *parser;
+#endif
+{
+ if (yytype < YYNTOKENS)
+ YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
+ else
+ YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
+
+ yy_symbol_value_print (yyoutput, yytype, yyvaluep, parser);
+ YYFPRINTF (yyoutput, ")");
+}
+
+/*------------------------------------------------------------------.
+| yy_stack_print -- Print the state stack from its BOTTOM up to its |
+| TOP (included). |
+`------------------------------------------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static void
+yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
+#else
+static void
+yy_stack_print (yybottom, yytop)
+ yytype_int16 *yybottom;
+ yytype_int16 *yytop;
+#endif
+{
+ YYFPRINTF (stderr, "Stack now");
+ for (; yybottom <= yytop; yybottom++)
+ {
+ int yybot = *yybottom;
+ YYFPRINTF (stderr, " %d", yybot);
+ }
+ YYFPRINTF (stderr, "\n");
+}
+
+# define YY_STACK_PRINT(Bottom, Top) \
+do { \
+ if (yydebug) \
+ yy_stack_print ((Bottom), (Top)); \
+} while (YYID (0))
+
+
+/*------------------------------------------------.
+| Report that the YYRULE is going to be reduced. |
+`------------------------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static void
+yy_reduce_print (YYSTYPE *yyvsp, int yyrule, struct parser_params *parser)
+#else
+static void
+yy_reduce_print (yyvsp, yyrule, parser)
+ YYSTYPE *yyvsp;
+ int yyrule;
+ struct parser_params *parser;
+#endif
+{
+ int yynrhs = yyr2[yyrule];
+ int yyi;
+ unsigned long int yylno = yyrline[yyrule];
+ YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
+ yyrule - 1, yylno);
+ /* The symbols being reduced. */
+ for (yyi = 0; yyi < yynrhs; yyi++)
+ {
+ YYFPRINTF (stderr, " $%d = ", yyi + 1);
+ yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
+ &(yyvsp[(yyi + 1) - (yynrhs)])
+ , parser);
+ YYFPRINTF (stderr, "\n");
+ }
+}
+
+# define YY_REDUCE_PRINT(Rule) \
+do { \
+ if (yydebug) \
+ yy_reduce_print (yyvsp, Rule, parser); \
+} while (YYID (0))
+
+/* Nonzero means print parse trace. It is left uninitialized so that
+ multiple parsers can coexist. */
+#ifndef yydebug
+int yydebug;
+#endif
+#else /* !YYDEBUG */
+# define YYDPRINTF(Args)
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
+# define YY_STACK_PRINT(Bottom, Top)
+# define YY_REDUCE_PRINT(Rule)
+#endif /* !YYDEBUG */
+
+
+/* YYINITDEPTH -- initial size of the parser's stacks. */
+#ifndef YYINITDEPTH
+# define YYINITDEPTH 200
+#endif
+
+/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
+ if the built-in stack extension method is used).
+
+ Do not make this value too large; the results are undefined if
+ YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
+ evaluated with infinite-precision integer arithmetic. */
+
+#ifndef YYMAXDEPTH
+# define YYMAXDEPTH 10000
+#endif
+
+
+#if YYERROR_VERBOSE
+
+# ifndef yystrlen
+# if defined __GLIBC__ && defined _STRING_H
+# define yystrlen strlen
+# else
+/* Return the length of YYSTR. */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static YYSIZE_T
+yystrlen (const char *yystr)
+#else
+static YYSIZE_T
+yystrlen (yystr)
+ const char *yystr;
+#endif
+{
+ YYSIZE_T yylen;
+ for (yylen = 0; yystr[yylen]; yylen++)
+ continue;
+ return yylen;
+}
+# endif
+# endif
+
+# ifndef yystpcpy
+# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
+# define yystpcpy stpcpy
+# else
+/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
+ YYDEST. */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static char *
+yystpcpy (char *yydest, const char *yysrc)
+#else
+static char *
+yystpcpy (yydest, yysrc)
+ char *yydest;
+ const char *yysrc;
+#endif
+{
+ char *yyd = yydest;
+ const char *yys = yysrc;
+
+ while ((*yyd++ = *yys++) != '\0')
+ continue;
+
+ return yyd - 1;
+}
+# endif
+# endif
+
+# ifndef yytnamerr
+/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
+ quotes and backslashes, so that it's suitable for yyerror. The
+ heuristic is that double-quoting is unnecessary unless the string
+ contains an apostrophe, a comma, or backslash (other than
+ backslash-backslash). YYSTR is taken from yytname. If YYRES is
+ null, do not copy; instead, return the length of what the result
+ would have been. */
+static YYSIZE_T
+yytnamerr (char *yyres, const char *yystr)
+{
+ if (*yystr == '"')
+ {
+ YYSIZE_T yyn = 0;
+ char const *yyp = yystr;
+
+ for (;;)
+ switch (*++yyp)
+ {
+ case '\'':
+ case ',':
+ goto do_not_strip_quotes;
+
+ case '\\':
+ if (*++yyp != '\\')
+ goto do_not_strip_quotes;
+ /* Fall through. */
+ default:
+ if (yyres)
+ yyres[yyn] = *yyp;
+ yyn++;
+ break;
+
+ case '"':
+ if (yyres)
+ yyres[yyn] = '\0';
+ return yyn;
+ }
+ do_not_strip_quotes: ;
+ }
+
+ if (! yyres)
+ return yystrlen (yystr);
+
+ return yystpcpy (yyres, yystr) - yyres;
+}
+# endif
+
+/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message
+ about the unexpected token YYTOKEN for the state stack whose top is
+ YYSSP.
+
+ Return 0 if *YYMSG was successfully written. Return 1 if *YYMSG is
+ not large enough to hold the message. In that case, also set
+ *YYMSG_ALLOC to the required number of bytes. Return 2 if the
+ required number of bytes is too large to store. */
+static int
+yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
+ yytype_int16 *yyssp, int yytoken)
+{
+ YYSIZE_T yysize0 = yytnamerr (0, yytname[yytoken]);
+ YYSIZE_T yysize = yysize0;
+ YYSIZE_T yysize1;
+ enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
+ /* Internationalized format string. */
+ const char *yyformat = 0;
+ /* Arguments of yyformat. */
+ char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
+ /* Number of reported tokens (one for the "unexpected", one per
+ "expected"). */
+ int yycount = 0;
+
+ /* There are many possibilities here to consider:
+ - Assume YYFAIL is not used. It's too flawed to consider. See
+ <http://lists.gnu.org/archive/html/bison-patches/2009-12/msg00024.html>
+ for details. YYERROR is fine as it does not invoke this
+ function.
+ - If this state is a consistent state with a default action, then
+ the only way this function was invoked is if the default action
+ is an error action. In that case, don't check for expected
+ tokens because there are none.
+ - The only way there can be no lookahead present (in yychar) is if
+ this state is a consistent state with a default action. Thus,
+ detecting the absence of a lookahead is sufficient to determine
+ that there is no unexpected or expected token to report. In that
+ case, just report a simple "syntax error".
+ - Don't assume there isn't a lookahead just because this state is a
+ consistent state with a default action. There might have been a
+ previous inconsistent state, consistent state with a non-default
+ action, or user semantic action that manipulated yychar.
+ - Of course, the expected token list depends on states to have
+ correct lookahead information, and it depends on the parser not
+ to perform extra reductions after fetching a lookahead from the
+ scanner and before detecting a syntax error. Thus, state merging
+ (from LALR or IELR) and default reductions corrupt the expected
+ token list. However, the list is correct for canonical LR with
+ one exception: it will still contain any token that will not be
+ accepted due to an error action in a later state.
+ */
+ if (yytoken != YYEMPTY)
+ {
+ int yyn = yypact[*yyssp];
+ yyarg[yycount++] = yytname[yytoken];
+ if (!yypact_value_is_default (yyn))
+ {
+ /* Start YYX at -YYN if negative to avoid negative indexes in
+ YYCHECK. In other words, skip the first -YYN actions for
+ this state because they are default actions. */
+ int yyxbegin = yyn < 0 ? -yyn : 0;
+ /* Stay within bounds of both yycheck and yytname. */
+ int yychecklim = YYLAST - yyn + 1;
+ int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
+ int yyx;
+
+ for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+ if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR
+ && !yytable_value_is_error (yytable[yyx + yyn]))
+ {
+ if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
+ {
+ yycount = 1;
+ yysize = yysize0;
+ break;
+ }
+ yyarg[yycount++] = yytname[yyx];
+ yysize1 = yysize + yytnamerr (0, yytname[yyx]);
+ if (! (yysize <= yysize1
+ && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
+ return 2;
+ yysize = yysize1;
+ }
+ }
+ }
+
+ switch (yycount)
+ {
+# define YYCASE_(N, S) \
+ case N: \
+ yyformat = S; \
+ break
+ YYCASE_(0, YY_("syntax error"));
+ YYCASE_(1, YY_("syntax error, unexpected %s"));
+ YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
+ YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
+ YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
+ YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
+# undef YYCASE_
+ }
+
+ yysize1 = yysize + yystrlen (yyformat);
+ if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
+ return 2;
+ yysize = yysize1;
+
+ if (*yymsg_alloc < yysize)
+ {
+ *yymsg_alloc = 2 * yysize;
+ if (! (yysize <= *yymsg_alloc
+ && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
+ *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
+ return 1;
+ }
+
+ /* Avoid sprintf, as that infringes on the user's name space.
+ Don't have undefined behavior even if the translation
+ produced a string with the wrong number of "%s"s. */
+ {
+ char *yyp = *yymsg;
+ int yyi = 0;
+ while ((*yyp = *yyformat) != '\0')
+ if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
+ {
+ yyp += yytnamerr (yyp, yyarg[yyi++]);
+ yyformat += 2;
+ }
+ else
+ {
+ yyp++;
+ yyformat++;
+ }
+ }
+ return 0;
+}
+#endif /* YYERROR_VERBOSE */
+
+/*-----------------------------------------------.
+| Release the memory associated to this symbol. |
+`-----------------------------------------------*/
+
+/*ARGSUSED*/
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static void
+yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, struct parser_params *parser)
+#else
+static void
+yydestruct (yymsg, yytype, yyvaluep, parser)
+ const char *yymsg;
+ int yytype;
+ YYSTYPE *yyvaluep;
+ struct parser_params *parser;
+#endif
+{
+ YYUSE (yyvaluep);
+ YYUSE (parser);
+
+ if (!yymsg)
+ yymsg = "Deleting";
+ YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
+
+ switch (yytype)
+ {
+
+ default:
+ break;
+ }
+}
+
+
+/* Prevent warnings from -Wmissing-prototypes. */
+#ifdef YYPARSE_PARAM
+#if defined __STDC__ || defined __cplusplus
+int yyparse (void *YYPARSE_PARAM);
+#else
+int yyparse ();
+#endif
+#else /* ! YYPARSE_PARAM */
+#if defined __STDC__ || defined __cplusplus
+int yyparse (struct parser_params *parser);
+#else
+int yyparse ();
+#endif
+#endif /* ! YYPARSE_PARAM */
+
+
+/*----------.
+| yyparse. |
+`----------*/
+
+#ifdef YYPARSE_PARAM
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+int
+yyparse (void *YYPARSE_PARAM)
+#else
+int
+yyparse (YYPARSE_PARAM)
+ void *YYPARSE_PARAM;
+#endif
+#else /* ! YYPARSE_PARAM */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+int
+yyparse (struct parser_params *parser)
+#else
+int
+yyparse (parser)
+ struct parser_params *parser;
+#endif
+#endif
+{
+/* The lookahead symbol. */
+int yychar;
+
+/* The semantic value of the lookahead symbol. */
+YYSTYPE yylval;
+
+ /* Number of syntax errors so far. */
+ int yynerrs;
+
+ int yystate;
+ /* Number of tokens to shift before error messages enabled. */
+ int yyerrstatus;
+
+ /* The stacks and their tools:
+ `yyss': related to states.
+ `yyvs': related to semantic values.
+
+ Refer to the stacks thru separate pointers, to allow yyoverflow
+ to reallocate them elsewhere. */
+
+ /* The state stack. */
+ yytype_int16 yyssa[YYINITDEPTH];
+ yytype_int16 *yyss;
+ yytype_int16 *yyssp;
+
+ /* The semantic value stack. */
+ YYSTYPE yyvsa[YYINITDEPTH];
+ YYSTYPE *yyvs;
+ YYSTYPE *yyvsp;
+
+ YYSIZE_T yystacksize;
+
+ int yyn;
+ int yyresult;
+ /* Lookahead token as an internal (translated) token number. */
+ int yytoken;
+ /* The variables used to return semantic value and location from the
+ action routines. */
+ YYSTYPE yyval;
+
+#if YYERROR_VERBOSE
+ /* Buffer for error messages, and its allocated size. */
+ char yymsgbuf[128];
+ char *yymsg = yymsgbuf;
+ YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
+#endif
+
+#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N))
+
+ /* The number of symbols on the RHS of the reduced rule.
+ Keep to zero when no symbol should be popped. */
+ int yylen = 0;
+
+ yytoken = 0;
+ yyss = yyssa;
+ yyvs = yyvsa;
+ yystacksize = YYINITDEPTH;
+
+ YYDPRINTF ((stderr, "Starting parse\n"));
+
+ yystate = 0;
+ yyerrstatus = 0;
+ yynerrs = 0;
+ yychar = YYEMPTY; /* Cause a token to be read. */
+
+ /* Initialize stack pointers.
+ Waste one element of value and location stack
+ so that they stay on the same level as the state stack.
+ The wasted elements are never initialized. */
+ yyssp = yyss;
+ yyvsp = yyvs;
+
+ goto yysetstate;
+
+/*------------------------------------------------------------.
+| yynewstate -- Push a new state, which is found in yystate. |
+`------------------------------------------------------------*/
+ yynewstate:
+ /* In all cases, when you get here, the value and location stacks
+ have just been pushed. So pushing a state here evens the stacks. */
+ yyssp++;
+
+ yysetstate:
+ *yyssp = yystate;
+
+ if (yyss + yystacksize - 1 <= yyssp)
+ {
+ /* Get the current used size of the three stacks, in elements. */
+ YYSIZE_T yysize = yyssp - yyss + 1;
+
+#ifdef yyoverflow
+ {
+ /* Give user a chance to reallocate the stack. Use copies of
+ these so that the &'s don't force the real ones into
+ memory. */
+ YYSTYPE *yyvs1 = yyvs;
+ yytype_int16 *yyss1 = yyss;
+
+ /* Each stack pointer address is followed by the size of the
+ data in use in that stack, in bytes. This used to be a
+ conditional around just the two extra args, but that might
+ be undefined if yyoverflow is a macro. */
+ yyoverflow (YY_("memory exhausted"),
+ &yyss1, yysize * sizeof (*yyssp),
+ &yyvs1, yysize * sizeof (*yyvsp),
+ &yystacksize);
+
+ yyss = yyss1;
+ yyvs = yyvs1;
+ }
+#else /* no yyoverflow */
+# ifndef YYSTACK_RELOCATE
+ goto yyexhaustedlab;
+# else
+ /* Extend the stack our own way. */
+ if (YYMAXDEPTH <= yystacksize)
+ goto yyexhaustedlab;
+ yystacksize *= 2;
+ if (YYMAXDEPTH < yystacksize)
+ yystacksize = YYMAXDEPTH;
+
+ {
+ yytype_int16 *yyss1 = yyss;
+ union yyalloc *yyptr =
+ (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
+ if (! yyptr)
+ goto yyexhaustedlab;
+ YYSTACK_RELOCATE (yyss_alloc, yyss);
+ YYSTACK_RELOCATE (yyvs_alloc, yyvs);
+# undef YYSTACK_RELOCATE
+ if (yyss1 != yyssa)
+ YYSTACK_FREE (yyss1);
+ }
+# endif
+#endif /* no yyoverflow */
+
+ yyssp = yyss + yysize - 1;
+ yyvsp = yyvs + yysize - 1;
+
+ YYDPRINTF ((stderr, "Stack size increased to %lu\n",
+ (unsigned long int) yystacksize));
+
+ if (yyss + yystacksize - 1 <= yyssp)
+ YYABORT;
+ }
+
+ YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+
+ if (yystate == YYFINAL)
+ YYACCEPT;
+
+ goto yybackup;
+
+/*-----------.
+| yybackup. |
+`-----------*/
+yybackup:
+
+ /* Do appropriate processing given the current state. Read a
+ lookahead token if we need one and don't already have one. */
+
+ /* First try to decide what to do without reference to lookahead token. */
+ yyn = yypact[yystate];
+ if (yypact_value_is_default (yyn))
+ goto yydefault;
+
+ /* Not known => get a lookahead token if don't already have one. */
+
+ /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */
+ if (yychar == YYEMPTY)
+ {
+ YYDPRINTF ((stderr, "Reading a token: "));
+ yychar = YYLEX;
+ }
+
+ if (yychar <= YYEOF)
+ {
+ yychar = yytoken = YYEOF;
+ YYDPRINTF ((stderr, "Now at end of input.\n"));
+ }
+ else
+ {
+ yytoken = YYTRANSLATE (yychar);
+ YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
+ }
+
+ /* If the proper action on seeing token YYTOKEN is to reduce or to
+ detect an error, take that action. */
+ yyn += yytoken;
+ if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
+ goto yydefault;
+ yyn = yytable[yyn];
+ if (yyn <= 0)
+ {
+ if (yytable_value_is_error (yyn))
+ goto yyerrlab;
+ yyn = -yyn;
+ goto yyreduce;
+ }
+
+ /* Count tokens shifted since error; after three, turn off error
+ status. */
+ if (yyerrstatus)
+ yyerrstatus--;
+
+ /* Shift the lookahead token. */
+ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
+
+ /* Discard the shifted token. */
+ yychar = YYEMPTY;
+
+ yystate = yyn;
+ *++yyvsp = yylval;
+
+ goto yynewstate;
+
+
+/*-----------------------------------------------------------.
+| yydefault -- do the default action for the current state. |
+`-----------------------------------------------------------*/
+yydefault:
+ yyn = yydefact[yystate];
+ if (yyn == 0)
+ goto yyerrlab;
+ goto yyreduce;
+
+
+/*-----------------------------.
+| yyreduce -- Do a reduction. |
+`-----------------------------*/
+yyreduce:
+ /* yyn is the number of a rule to reduce with. */
+ yylen = yyr2[yyn];
+
+ /* If YYLEN is nonzero, implement the default value of the action:
+ `$$ = $1'.
+
+ Otherwise, the following line sets YYVAL to garbage.
+ This behavior is undocumented and Bison
+ users should not rely upon it. Assigning to YYVAL
+ unconditionally makes the parser a bit smaller, and it avoids a
+ GCC warning that YYVAL may be used uninitialized. */
+ yyval = yyvsp[1-yylen];
+
+
+ YY_REDUCE_PRINT (yyn);
+ switch (yyn)
+ {
+ case 2:
+
+/* Line 1806 of yacc.c */
+#line 901 "parse.y"
+ {
+ lex_state = EXPR_BEG;
+ /*%%%*/
+ local_push(compile_for_eval || rb_parse_in_main());
+ /*%
+ local_push(0);
+ %*/
+ }
+ break;
+
+ case 3:
+
+/* Line 1806 of yacc.c */
+#line 910 "parse.y"
+ {
+ /*%%%*/
+ if ((yyvsp[(2) - (2)].node) && !compile_for_eval) {
+ /* last expression should not be void */
+ if (nd_type((yyvsp[(2) - (2)].node)) != NODE_BLOCK) void_expr((yyvsp[(2) - (2)].node));
+ else {
+ NODE *node = (yyvsp[(2) - (2)].node);
+ while (node->nd_next) {
+ node = node->nd_next;
+ }
+ void_expr(node->nd_head);
+ }
+ }
+ ruby_eval_tree = NEW_SCOPE(0, block_append(ruby_eval_tree, (yyvsp[(2) - (2)].node)));
+ /*%
+ $$ = $2;
+ parser->result = dispatch1(program, $$);
+ %*/
+ local_pop();
+ }
+ break;
+
+ case 4:
+
+/* Line 1806 of yacc.c */
+#line 933 "parse.y"
+ {
+ /*%%%*/
+ void_stmts((yyvsp[(1) - (2)].node));
+ fixup_nodes(&deferred_nodes);
+ /*%
+ %*/
+ (yyval.node) = (yyvsp[(1) - (2)].node);
+ }
+ break;
+
+ case 5:
+
+/* Line 1806 of yacc.c */
+#line 944 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_BEGIN(0);
+ /*%
+ $$ = dispatch2(stmts_add, dispatch0(stmts_new),
+ dispatch0(void_stmt));
+ %*/
+ }
+ break;
+
+ case 6:
+
+/* Line 1806 of yacc.c */
+#line 953 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = newline_node((yyvsp[(1) - (1)].node));
+ /*%
+ $$ = dispatch2(stmts_add, dispatch0(stmts_new), $1);
+ %*/
+ }
+ break;
+
+ case 7:
+
+/* Line 1806 of yacc.c */
+#line 961 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = block_append((yyvsp[(1) - (3)].node), newline_node((yyvsp[(3) - (3)].node)));
+ /*%
+ $$ = dispatch2(stmts_add, $1, $3);
+ %*/
+ }
+ break;
+
+ case 8:
+
+/* Line 1806 of yacc.c */
+#line 969 "parse.y"
+ {
+ (yyval.node) = remove_begin((yyvsp[(2) - (2)].node));
+ }
+ break;
+
+ case 10:
+
+/* Line 1806 of yacc.c */
+#line 976 "parse.y"
+ {
+ /*%%%*/
+ /* local_push(0); */
+ /*%
+ %*/
+ }
+ break;
+
+ case 11:
+
+/* Line 1806 of yacc.c */
+#line 983 "parse.y"
+ {
+ /*%%%*/
+ ruby_eval_tree_begin = block_append(ruby_eval_tree_begin,
+ (yyvsp[(4) - (5)].node));
+ /* NEW_PREEXE($4)); */
+ /* local_pop(); */
+ (yyval.node) = NEW_BEGIN(0);
+ /*%
+ $$ = dispatch1(BEGIN, $4);
+ %*/
+ }
+ break;
+
+ case 12:
+
+/* Line 1806 of yacc.c */
+#line 1000 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = (yyvsp[(1) - (4)].node);
+ if ((yyvsp[(2) - (4)].node)) {
+ (yyval.node) = NEW_RESCUE((yyvsp[(1) - (4)].node), (yyvsp[(2) - (4)].node), (yyvsp[(3) - (4)].node));
+ }
+ else if ((yyvsp[(3) - (4)].node)) {
+ rb_warn0("else without rescue is useless");
+ (yyval.node) = block_append((yyval.node), (yyvsp[(3) - (4)].node));
+ }
+ if ((yyvsp[(4) - (4)].node)) {
+ if ((yyval.node)) {
+ (yyval.node) = NEW_ENSURE((yyval.node), (yyvsp[(4) - (4)].node));
+ }
+ else {
+ (yyval.node) = block_append((yyvsp[(4) - (4)].node), NEW_NIL());
+ }
+ }
+ fixpos((yyval.node), (yyvsp[(1) - (4)].node));
+ /*%
+ $$ = dispatch4(bodystmt,
+ escape_Qundef($1),
+ escape_Qundef($2),
+ escape_Qundef($3),
+ escape_Qundef($4));
+ %*/
+ }
+ break;
+
+ case 13:
+
+/* Line 1806 of yacc.c */
+#line 1030 "parse.y"
+ {
+ /*%%%*/
+ void_stmts((yyvsp[(1) - (2)].node));
+ fixup_nodes(&deferred_nodes);
+ /*%
+ %*/
+ (yyval.node) = (yyvsp[(1) - (2)].node);
+ }
+ break;
+
+ case 14:
+
+/* Line 1806 of yacc.c */
+#line 1041 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_BEGIN(0);
+ /*%
+ $$ = dispatch2(stmts_add, dispatch0(stmts_new),
+ dispatch0(void_stmt));
+ %*/
+ }
+ break;
+
+ case 15:
+
+/* Line 1806 of yacc.c */
+#line 1050 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = newline_node((yyvsp[(1) - (1)].node));
+ /*%
+ $$ = dispatch2(stmts_add, dispatch0(stmts_new), $1);
+ %*/
+ }
+ break;
+
+ case 16:
+
+/* Line 1806 of yacc.c */
+#line 1058 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = block_append((yyvsp[(1) - (3)].node), newline_node((yyvsp[(3) - (3)].node)));
+ /*%
+ $$ = dispatch2(stmts_add, $1, $3);
+ %*/
+ }
+ break;
+
+ case 17:
+
+/* Line 1806 of yacc.c */
+#line 1066 "parse.y"
+ {
+ (yyval.node) = remove_begin((yyvsp[(2) - (2)].node));
+ }
+ break;
+
+ case 18:
+
+/* Line 1806 of yacc.c */
+#line 1072 "parse.y"
+ {
+ (yyval.node) = (yyvsp[(1) - (1)].node);
+ }
+ break;
+
+ case 19:
+
+/* Line 1806 of yacc.c */
+#line 1076 "parse.y"
+ {
+ yyerror("BEGIN is permitted only at toplevel");
+ /*%%%*/
+ /* local_push(0); */
+ /*%
+ %*/
+ }
+ break;
+
+ case 20:
+
+/* Line 1806 of yacc.c */
+#line 1084 "parse.y"
+ {
+ /*%%%*/
+ ruby_eval_tree_begin = block_append(ruby_eval_tree_begin,
+ (yyvsp[(4) - (5)].node));
+ /* NEW_PREEXE($4)); */
+ /* local_pop(); */
+ (yyval.node) = NEW_BEGIN(0);
+ /*%
+ $$ = dispatch1(BEGIN, $4);
+ %*/
+ }
+ break;
+
+ case 21:
+
+/* Line 1806 of yacc.c */
+#line 1096 "parse.y"
+ {lex_state = EXPR_FNAME;}
+ break;
+
+ case 22:
+
+/* Line 1806 of yacc.c */
+#line 1097 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_ALIAS((yyvsp[(2) - (4)].node), (yyvsp[(4) - (4)].node));
+ /*%
+ $$ = dispatch2(alias, $2, $4);
+ %*/
+ }
+ break;
+
+ case 23:
+
+/* Line 1806 of yacc.c */
+#line 1105 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_VALIAS((yyvsp[(2) - (3)].id), (yyvsp[(3) - (3)].id));
+ /*%
+ $$ = dispatch2(var_alias, $2, $3);
+ %*/
+ }
+ break;
+
+ case 24:
+
+/* Line 1806 of yacc.c */
+#line 1113 "parse.y"
+ {
+ /*%%%*/
+ char buf[2];
+ buf[0] = '$';
+ buf[1] = (char)(yyvsp[(3) - (3)].node)->nd_nth;
+ (yyval.node) = NEW_VALIAS((yyvsp[(2) - (3)].id), rb_intern2(buf, 2));
+ /*%
+ $$ = dispatch2(var_alias, $2, $3);
+ %*/
+ }
+ break;
+
+ case 25:
+
+/* Line 1806 of yacc.c */
+#line 1124 "parse.y"
+ {
+ /*%%%*/
+ yyerror("can't make alias for the number variables");
+ (yyval.node) = NEW_BEGIN(0);
+ /*%
+ $$ = dispatch2(var_alias, $2, $3);
+ $$ = dispatch1(alias_error, $$);
+ ripper_error();
+ %*/
+ }
+ break;
+
+ case 26:
+
+/* Line 1806 of yacc.c */
+#line 1135 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = (yyvsp[(2) - (2)].node);
+ /*%
+ $$ = dispatch1(undef, $2);
+ %*/
+ }
+ break;
+
+ case 27:
+
+/* Line 1806 of yacc.c */
+#line 1143 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_IF(cond((yyvsp[(3) - (3)].node)), remove_begin((yyvsp[(1) - (3)].node)), 0);
+ fixpos((yyval.node), (yyvsp[(3) - (3)].node));
+ /*%
+ $$ = dispatch2(if_mod, $3, $1);
+ %*/
+ }
+ break;
+
+ case 28:
+
+/* Line 1806 of yacc.c */
+#line 1152 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_UNLESS(cond((yyvsp[(3) - (3)].node)), remove_begin((yyvsp[(1) - (3)].node)), 0);
+ fixpos((yyval.node), (yyvsp[(3) - (3)].node));
+ /*%
+ $$ = dispatch2(unless_mod, $3, $1);
+ %*/
+ }
+ break;
+
+ case 29:
+
+/* Line 1806 of yacc.c */
+#line 1161 "parse.y"
+ {
+ /*%%%*/
+ if ((yyvsp[(1) - (3)].node) && nd_type((yyvsp[(1) - (3)].node)) == NODE_BEGIN) {
+ (yyval.node) = NEW_WHILE(cond((yyvsp[(3) - (3)].node)), (yyvsp[(1) - (3)].node)->nd_body, 0);
+ }
+ else {
+ (yyval.node) = NEW_WHILE(cond((yyvsp[(3) - (3)].node)), (yyvsp[(1) - (3)].node), 1);
+ }
+ /*%
+ $$ = dispatch2(while_mod, $3, $1);
+ %*/
+ }
+ break;
+
+ case 30:
+
+/* Line 1806 of yacc.c */
+#line 1174 "parse.y"
+ {
+ /*%%%*/
+ if ((yyvsp[(1) - (3)].node) && nd_type((yyvsp[(1) - (3)].node)) == NODE_BEGIN) {
+ (yyval.node) = NEW_UNTIL(cond((yyvsp[(3) - (3)].node)), (yyvsp[(1) - (3)].node)->nd_body, 0);
+ }
+ else {
+ (yyval.node) = NEW_UNTIL(cond((yyvsp[(3) - (3)].node)), (yyvsp[(1) - (3)].node), 1);
+ }
+ /*%
+ $$ = dispatch2(until_mod, $3, $1);
+ %*/
+ }
+ break;
+
+ case 31:
+
+/* Line 1806 of yacc.c */
+#line 1187 "parse.y"
+ {
+ /*%%%*/
+ NODE *resq = NEW_RESBODY(0, remove_begin((yyvsp[(3) - (3)].node)), 0);
+ (yyval.node) = NEW_RESCUE(remove_begin((yyvsp[(1) - (3)].node)), resq, 0);
+ /*%
+ $$ = dispatch2(rescue_mod, $1, $3);
+ %*/
+ }
+ break;
+
+ case 32:
+
+/* Line 1806 of yacc.c */
+#line 1196 "parse.y"
+ {
+ if (in_def || in_single) {
+ rb_warn0("END in method; use at_exit");
+ }
+ /*%%%*/
+ (yyval.node) = NEW_POSTEXE(NEW_NODE(
+ NODE_SCOPE, 0 /* tbl */, (yyvsp[(3) - (4)].node) /* body */, 0 /* args */));
+ /*%
+ $$ = dispatch1(END, $3);
+ %*/
+ }
+ break;
+
+ case 34:
+
+/* Line 1806 of yacc.c */
+#line 1209 "parse.y"
+ {
+ /*%%%*/
+ value_expr((yyvsp[(3) - (3)].node));
+ (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
+ (yyval.node) = (yyvsp[(1) - (3)].node);
+ /*%
+ $$ = dispatch2(massign, $1, $3);
+ %*/
+ }
+ break;
+
+ case 35:
+
+/* Line 1806 of yacc.c */
+#line 1219 "parse.y"
+ {
+ value_expr((yyvsp[(3) - (3)].node));
+ (yyval.node) = new_op_assign((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].id), (yyvsp[(3) - (3)].node));
+ }
+ break;
+
+ case 36:
+
+/* Line 1806 of yacc.c */
+#line 1224 "parse.y"
+ {
+ /*%%%*/
+ NODE *args;
+
+ value_expr((yyvsp[(6) - (6)].node));
+ if (!(yyvsp[(3) - (6)].node)) (yyvsp[(3) - (6)].node) = NEW_ZARRAY();
+ args = arg_concat((yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node));
+ if ((yyvsp[(5) - (6)].id) == tOROP) {
+ (yyvsp[(5) - (6)].id) = 0;
+ }
+ else if ((yyvsp[(5) - (6)].id) == tANDOP) {
+ (yyvsp[(5) - (6)].id) = 1;
+ }
+ (yyval.node) = NEW_OP_ASGN1((yyvsp[(1) - (6)].node), (yyvsp[(5) - (6)].id), args);
+ fixpos((yyval.node), (yyvsp[(1) - (6)].node));
+ /*%
+ $$ = dispatch2(aref_field, $1, escape_Qundef($3));
+ $$ = dispatch3(opassign, $$, $5, $6);
+ %*/
+ }
+ break;
+
+ case 37:
+
+/* Line 1806 of yacc.c */
+#line 1245 "parse.y"
+ {
+ value_expr((yyvsp[(5) - (5)].node));
+ (yyval.node) = new_attr_op_assign((yyvsp[(1) - (5)].node), ripper_id2sym('.'), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
+ }
+ break;
+
+ case 38:
+
+/* Line 1806 of yacc.c */
+#line 1250 "parse.y"
+ {
+ value_expr((yyvsp[(5) - (5)].node));
+ (yyval.node) = new_attr_op_assign((yyvsp[(1) - (5)].node), ripper_id2sym('.'), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
+ }
+ break;
+
+ case 39:
+
+/* Line 1806 of yacc.c */
+#line 1255 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_COLON2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id));
+ (yyval.node) = new_const_op_assign((yyval.node), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
+ /*%
+ $$ = dispatch2(const_path_field, $1, $3);
+ $$ = dispatch3(opassign, $$, $4, $5);
+ %*/
+ }
+ break;
+
+ case 40:
+
+/* Line 1806 of yacc.c */
+#line 1265 "parse.y"
+ {
+ value_expr((yyvsp[(5) - (5)].node));
+ (yyval.node) = new_attr_op_assign((yyvsp[(1) - (5)].node), ID2SYM(idCOLON2), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
+ }
+ break;
+
+ case 41:
+
+/* Line 1806 of yacc.c */
+#line 1270 "parse.y"
+ {
+ /*%%%*/
+ rb_backref_error((yyvsp[(1) - (3)].node));
+ (yyval.node) = NEW_BEGIN(0);
+ /*%
+ $$ = dispatch2(assign, dispatch1(var_field, $1), $3);
+ $$ = dispatch1(assign_error, $$);
+ ripper_error();
+ %*/
+ }
+ break;
+
+ case 42:
+
+/* Line 1806 of yacc.c */
+#line 1281 "parse.y"
+ {
+ /*%%%*/
+ value_expr((yyvsp[(3) - (3)].node));
+ (yyval.node) = node_assign((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
+ /*%
+ $$ = dispatch2(assign, $1, $3);
+ %*/
+ }
+ break;
+
+ case 43:
+
+/* Line 1806 of yacc.c */
+#line 1290 "parse.y"
+ {
+ /*%%%*/
+ (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
+ (yyval.node) = (yyvsp[(1) - (3)].node);
+ /*%
+ $$ = dispatch2(massign, $1, $3);
+ %*/
+ }
+ break;
+
+ case 45:
+
+/* Line 1806 of yacc.c */
+#line 1302 "parse.y"
+ {
+ /*%%%*/
+ value_expr((yyvsp[(3) - (3)].node));
+ (yyval.node) = node_assign((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
+ /*%
+ $$ = dispatch2(assign, $1, $3);
+ %*/
+ }
+ break;
+
+ case 46:
+
+/* Line 1806 of yacc.c */
+#line 1311 "parse.y"
+ {
+ /*%%%*/
+ value_expr((yyvsp[(3) - (3)].node));
+ (yyval.node) = node_assign((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
+ /*%
+ $$ = dispatch2(assign, $1, $3);
+ %*/
+ }
+ break;
+
+ case 48:
+
+/* Line 1806 of yacc.c */
+#line 1324 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = logop(NODE_AND, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
+ /*%
+ $$ = dispatch3(binary, $1, ripper_intern("and"), $3);
+ %*/
+ }
+ break;
+
+ case 49:
+
+/* Line 1806 of yacc.c */
+#line 1332 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = logop(NODE_OR, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
+ /*%
+ $$ = dispatch3(binary, $1, ripper_intern("or"), $3);
+ %*/
+ }
+ break;
+
+ case 50:
+
+/* Line 1806 of yacc.c */
+#line 1340 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = call_uni_op(cond((yyvsp[(3) - (3)].node)), '!');
+ /*%
+ $$ = dispatch2(unary, ripper_intern("not"), $3);
+ %*/
+ }
+ break;
+
+ case 51:
+
+/* Line 1806 of yacc.c */
+#line 1348 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = call_uni_op(cond((yyvsp[(2) - (2)].node)), '!');
+ /*%
+ $$ = dispatch2(unary, ripper_id2sym('!'), $2);
+ %*/
+ }
+ break;
+
+ case 53:
+
+/* Line 1806 of yacc.c */
+#line 1359 "parse.y"
+ {
+ /*%%%*/
+ value_expr((yyvsp[(1) - (1)].node));
+ (yyval.node) = (yyvsp[(1) - (1)].node);
+ if (!(yyval.node)) (yyval.node) = NEW_NIL();
+ /*%
+ $$ = $1;
+ %*/
+ }
+ break;
+
+ case 57:
+
+/* Line 1806 of yacc.c */
+#line 1376 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
+ /*%
+ $$ = dispatch3(call, $1, $2, $3);
+ $$ = method_arg($$, $4);
+ %*/
+ }
+ break;
+
+ case 58:
+
+/* Line 1806 of yacc.c */
+#line 1387 "parse.y"
+ {
+ (yyvsp[(1) - (1)].vars) = dyna_push();
+ /*%%%*/
+ (yyval.num) = ruby_sourceline;
+ /*%
+ %*/
+ }
+ break;
+
+ case 59:
+
+/* Line 1806 of yacc.c */
+#line 1397 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node));
+ nd_set_line((yyval.node), (yyvsp[(2) - (5)].num));
+ /*%
+ $$ = dispatch2(brace_block, escape_Qundef($3), $4);
+ %*/
+ dyna_pop((yyvsp[(1) - (5)].vars));
+ }
+ break;
+
+ case 60:
+
+/* Line 1806 of yacc.c */
+#line 1409 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_FCALL((yyvsp[(1) - (1)].id), 0);
+ nd_set_line((yyval.node), tokline);
+ /*%
+ %*/
+ }
+ break;
+
+ case 61:
+
+/* Line 1806 of yacc.c */
+#line 1419 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = (yyvsp[(1) - (2)].node);
+ (yyval.node)->nd_args = (yyvsp[(2) - (2)].node);
+ /*%
+ $$ = dispatch2(command, $1, $2);
+ %*/
+ }
+ break;
+
+ case 62:
+
+/* Line 1806 of yacc.c */
+#line 1428 "parse.y"
+ {
+ /*%%%*/
+ block_dup_check((yyvsp[(2) - (3)].node),(yyvsp[(3) - (3)].node));
+ (yyvsp[(1) - (3)].node)->nd_args = (yyvsp[(2) - (3)].node);
+ (yyvsp[(3) - (3)].node)->nd_iter = (yyvsp[(1) - (3)].node);
+ (yyval.node) = (yyvsp[(3) - (3)].node);
+ fixpos((yyval.node), (yyvsp[(1) - (3)].node));
+ /*%
+ $$ = dispatch2(command, $1, $2);
+ $$ = method_add_block($$, $3);
+ %*/
+ }
+ break;
+
+ case 63:
+
+/* Line 1806 of yacc.c */
+#line 1441 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
+ fixpos((yyval.node), (yyvsp[(1) - (4)].node));
+ /*%
+ $$ = dispatch4(command_call, $1, ripper_id2sym('.'), $3, $4);
+ %*/
+ }
+ break;
+
+ case 64:
+
+/* Line 1806 of yacc.c */
+#line 1450 "parse.y"
+ {
+ /*%%%*/
+ block_dup_check((yyvsp[(4) - (5)].node),(yyvsp[(5) - (5)].node));
+ (yyvsp[(5) - (5)].node)->nd_iter = NEW_CALL((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].node));
+ (yyval.node) = (yyvsp[(5) - (5)].node);
+ fixpos((yyval.node), (yyvsp[(1) - (5)].node));
+ /*%
+ $$ = dispatch4(command_call, $1, ripper_id2sym('.'), $3, $4);
+ $$ = method_add_block($$, $5);
+ %*/
+ }
+ break;
+
+ case 65:
+
+/* Line 1806 of yacc.c */
+#line 1462 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
+ fixpos((yyval.node), (yyvsp[(1) - (4)].node));
+ /*%
+ $$ = dispatch4(command_call, $1, ID2SYM(idCOLON2), $3, $4);
+ %*/
+ }
+ break;
+
+ case 66:
+
+/* Line 1806 of yacc.c */
+#line 1471 "parse.y"
+ {
+ /*%%%*/
+ block_dup_check((yyvsp[(4) - (5)].node),(yyvsp[(5) - (5)].node));
+ (yyvsp[(5) - (5)].node)->nd_iter = NEW_CALL((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].node));
+ (yyval.node) = (yyvsp[(5) - (5)].node);
+ fixpos((yyval.node), (yyvsp[(1) - (5)].node));
+ /*%
+ $$ = dispatch4(command_call, $1, ID2SYM(idCOLON2), $3, $4);
+ $$ = method_add_block($$, $5);
+ %*/
+ }
+ break;
+
+ case 67:
+
+/* Line 1806 of yacc.c */
+#line 1483 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_SUPER((yyvsp[(2) - (2)].node));
+ fixpos((yyval.node), (yyvsp[(2) - (2)].node));
+ /*%
+ $$ = dispatch1(super, $2);
+ %*/
+ }
+ break;
+
+ case 68:
+
+/* Line 1806 of yacc.c */
+#line 1492 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = new_yield((yyvsp[(2) - (2)].node));
+ fixpos((yyval.node), (yyvsp[(2) - (2)].node));
+ /*%
+ $$ = dispatch1(yield, $2);
+ %*/
+ }
+ break;
+
+ case 69:
+
+/* Line 1806 of yacc.c */
+#line 1501 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_RETURN(ret_args((yyvsp[(2) - (2)].node)));
+ /*%
+ $$ = dispatch1(return, $2);
+ %*/
+ }
+ break;
+
+ case 70:
+
+/* Line 1806 of yacc.c */
+#line 1509 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_BREAK(ret_args((yyvsp[(2) - (2)].node)));
+ /*%
+ $$ = dispatch1(break, $2);
+ %*/
+ }
+ break;
+
+ case 71:
+
+/* Line 1806 of yacc.c */
+#line 1517 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_NEXT(ret_args((yyvsp[(2) - (2)].node)));
+ /*%
+ $$ = dispatch1(next, $2);
+ %*/
+ }
+ break;
+
+ case 73:
+
+/* Line 1806 of yacc.c */
+#line 1528 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = (yyvsp[(2) - (3)].node);
+ /*%
+ $$ = dispatch1(mlhs_paren, $2);
+ %*/
+ }
+ break;
+
+ case 75:
+
+/* Line 1806 of yacc.c */
+#line 1539 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_MASGN(NEW_LIST((yyvsp[(2) - (3)].node)), 0);
+ /*%
+ $$ = dispatch1(mlhs_paren, $2);
+ %*/
+ }
+ break;
+
+ case 76:
+
+/* Line 1806 of yacc.c */
+#line 1549 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_MASGN((yyvsp[(1) - (1)].node), 0);
+ /*%
+ $$ = $1;
+ %*/
+ }
+ break;
+
+ case 77:
+
+/* Line 1806 of yacc.c */
+#line 1557 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_MASGN(list_append((yyvsp[(1) - (2)].node),(yyvsp[(2) - (2)].node)), 0);
+ /*%
+ $$ = mlhs_add($1, $2);
+ %*/
+ }
+ break;
+
+ case 78:
+
+/* Line 1806 of yacc.c */
+#line 1565 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_MASGN((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
+ /*%
+ $$ = mlhs_add_star($1, $3);
+ %*/
+ }
+ break;
+
+ case 79:
+
+/* Line 1806 of yacc.c */
+#line 1573 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_MASGN((yyvsp[(1) - (5)].node), NEW_POSTARG((yyvsp[(3) - (5)].node),(yyvsp[(5) - (5)].node)));
+ /*%
+ $1 = mlhs_add_star($1, $3);
+ $$ = mlhs_add($1, $5);
+ %*/
+ }
+ break;
+
+ case 80:
+
+/* Line 1806 of yacc.c */
+#line 1582 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_MASGN((yyvsp[(1) - (2)].node), -1);
+ /*%
+ $$ = mlhs_add_star($1, Qnil);
+ %*/
+ }
+ break;
+
+ case 81:
+
+/* Line 1806 of yacc.c */
+#line 1590 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_MASGN((yyvsp[(1) - (4)].node), NEW_POSTARG(-1, (yyvsp[(4) - (4)].node)));
+ /*%
+ $1 = mlhs_add_star($1, Qnil);
+ $$ = mlhs_add($1, $4);
+ %*/
+ }
+ break;
+
+ case 82:
+
+/* Line 1806 of yacc.c */
+#line 1599 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_MASGN(0, (yyvsp[(2) - (2)].node));
+ /*%
+ $$ = mlhs_add_star(mlhs_new(), $2);
+ %*/
+ }
+ break;
+
+ case 83:
+
+/* Line 1806 of yacc.c */
+#line 1607 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_MASGN(0, NEW_POSTARG((yyvsp[(2) - (4)].node),(yyvsp[(4) - (4)].node)));
+ /*%
+ $2 = mlhs_add_star(mlhs_new(), $2);
+ $$ = mlhs_add($2, $4);
+ %*/
+ }
+ break;
+
+ case 84:
+
+/* Line 1806 of yacc.c */
+#line 1616 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_MASGN(0, -1);
+ /*%
+ $$ = mlhs_add_star(mlhs_new(), Qnil);
+ %*/
+ }
+ break;
+
+ case 85:
+
+/* Line 1806 of yacc.c */
+#line 1624 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_MASGN(0, NEW_POSTARG(-1, (yyvsp[(3) - (3)].node)));
+ /*%
+ $$ = mlhs_add_star(mlhs_new(), Qnil);
+ $$ = mlhs_add($$, $3);
+ %*/
+ }
+ break;
+
+ case 87:
+
+/* Line 1806 of yacc.c */
+#line 1636 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = (yyvsp[(2) - (3)].node);
+ /*%
+ $$ = dispatch1(mlhs_paren, $2);
+ %*/
+ }
+ break;
+
+ case 88:
+
+/* Line 1806 of yacc.c */
+#line 1646 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_LIST((yyvsp[(1) - (2)].node));
+ /*%
+ $$ = mlhs_add(mlhs_new(), $1);
+ %*/
+ }
+ break;
+
+ case 89:
+
+/* Line 1806 of yacc.c */
+#line 1654 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].node));
+ /*%
+ $$ = mlhs_add($1, $2);
+ %*/
+ }
+ break;
+
+ case 90:
+
+/* Line 1806 of yacc.c */
+#line 1664 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
+ /*%
+ $$ = mlhs_add(mlhs_new(), $1);
+ %*/
+ }
+ break;
+
+ case 91:
+
+/* Line 1806 of yacc.c */
+#line 1672 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
+ /*%
+ $$ = mlhs_add($1, $3);
+ %*/
+ }
+ break;
+
+ case 92:
+
+/* Line 1806 of yacc.c */
+#line 1682 "parse.y"
+ {
+ (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
+ }
+ break;
+
+ case 93:
+
+/* Line 1806 of yacc.c */
+#line 1686 "parse.y"
+ {
+ (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
+ }
+ break;
+
+ case 94:
+
+/* Line 1806 of yacc.c */
+#line 1690 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = aryset((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node));
+ /*%
+ $$ = dispatch2(aref_field, $1, escape_Qundef($3));
+ %*/
+ }
+ break;
+
+ case 95:
+
+/* Line 1806 of yacc.c */
+#line 1698 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
+ /*%
+ $$ = dispatch3(field, $1, ripper_id2sym('.'), $3);
+ %*/
+ }
+ break;
+
+ case 96:
+
+/* Line 1806 of yacc.c */
+#line 1706 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
+ /*%
+ $$ = dispatch2(const_path_field, $1, $3);
+ %*/
+ }
+ break;
+
+ case 97:
+
+/* Line 1806 of yacc.c */
+#line 1714 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
+ /*%
+ $$ = dispatch3(field, $1, ripper_id2sym('.'), $3);
+ %*/
+ }
+ break;
+
+ case 98:
+
+/* Line 1806 of yacc.c */
+#line 1722 "parse.y"
+ {
+ /*%%%*/
+ if (in_def || in_single)
+ yyerror("dynamic constant assignment");
+ (yyval.node) = NEW_CDECL(0, 0, NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id)));
+ /*%
+ $$ = dispatch2(const_path_field, $1, $3);
+ if (in_def || in_single) {
+ $$ = dispatch1(assign_error, $$);
+ ripper_error();
+ }
+ %*/
+ }
+ break;
+
+ case 99:
+
+/* Line 1806 of yacc.c */
+#line 1736 "parse.y"
+ {
+ /*%%%*/
+ if (in_def || in_single)
+ yyerror("dynamic constant assignment");
+ (yyval.node) = NEW_CDECL(0, 0, NEW_COLON3((yyvsp[(2) - (2)].id)));
+ /*%
+ $$ = dispatch1(top_const_field, $2);
+ if (in_def || in_single) {
+ $$ = dispatch1(assign_error, $$);
+ ripper_error();
+ }
+ %*/
+ }
+ break;
+
+ case 100:
+
+/* Line 1806 of yacc.c */
+#line 1750 "parse.y"
+ {
+ /*%%%*/
+ rb_backref_error((yyvsp[(1) - (1)].node));
+ (yyval.node) = NEW_BEGIN(0);
+ /*%
+ $$ = dispatch1(var_field, $1);
+ $$ = dispatch1(assign_error, $$);
+ ripper_error();
+ %*/
+ }
+ break;
+
+ case 101:
+
+/* Line 1806 of yacc.c */
+#line 1763 "parse.y"
+ {
+ (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
+ /*%%%*/
+ if (!(yyval.node)) (yyval.node) = NEW_BEGIN(0);
+ /*%
+ $$ = dispatch1(var_field, $$);
+ %*/
+ }
+ break;
+
+ case 102:
+
+/* Line 1806 of yacc.c */
+#line 1772 "parse.y"
+ {
+ (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
+ /*%%%*/
+ if (!(yyval.node)) (yyval.node) = NEW_BEGIN(0);
+ /*%
+ $$ = dispatch1(var_field, $$);
+ %*/
+ }
+ break;
+
+ case 103:
+
+/* Line 1806 of yacc.c */
+#line 1781 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = aryset((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node));
+ /*%
+ $$ = dispatch2(aref_field, $1, escape_Qundef($3));
+ %*/
+ }
+ break;
+
+ case 104:
+
+/* Line 1806 of yacc.c */
+#line 1789 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
+ /*%
+ $$ = dispatch3(field, $1, ripper_id2sym('.'), $3);
+ %*/
+ }
+ break;
+
+ case 105:
+
+/* Line 1806 of yacc.c */
+#line 1797 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
+ /*%
+ $$ = dispatch3(field, $1, ID2SYM(idCOLON2), $3);
+ %*/
+ }
+ break;
+
+ case 106:
+
+/* Line 1806 of yacc.c */
+#line 1805 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
+ /*%
+ $$ = dispatch3(field, $1, ripper_id2sym('.'), $3);
+ %*/
+ }
+ break;
+
+ case 107:
+
+/* Line 1806 of yacc.c */
+#line 1813 "parse.y"
+ {
+ /*%%%*/
+ if (in_def || in_single)
+ yyerror("dynamic constant assignment");
+ (yyval.node) = NEW_CDECL(0, 0, NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id)));
+ /*%
+ $$ = dispatch2(const_path_field, $1, $3);
+ if (in_def || in_single) {
+ $$ = dispatch1(assign_error, $$);
+ ripper_error();
+ }
+ %*/
+ }
+ break;
+
+ case 108:
+
+/* Line 1806 of yacc.c */
+#line 1827 "parse.y"
+ {
+ /*%%%*/
+ if (in_def || in_single)
+ yyerror("dynamic constant assignment");
+ (yyval.node) = NEW_CDECL(0, 0, NEW_COLON3((yyvsp[(2) - (2)].id)));
+ /*%
+ $$ = dispatch1(top_const_field, $2);
+ if (in_def || in_single) {
+ $$ = dispatch1(assign_error, $$);
+ ripper_error();
+ }
+ %*/
+ }
+ break;
+
+ case 109:
+
+/* Line 1806 of yacc.c */
+#line 1841 "parse.y"
+ {
+ /*%%%*/
+ rb_backref_error((yyvsp[(1) - (1)].node));
+ (yyval.node) = NEW_BEGIN(0);
+ /*%
+ $$ = dispatch1(assign_error, $1);
+ ripper_error();
+ %*/
+ }
+ break;
+
+ case 110:
+
+/* Line 1806 of yacc.c */
+#line 1853 "parse.y"
+ {
+ /*%%%*/
+ yyerror("class/module name must be CONSTANT");
+ /*%
+ $$ = dispatch1(class_name_error, $1);
+ ripper_error();
+ %*/
+ }
+ break;
+
+ case 112:
+
+/* Line 1806 of yacc.c */
+#line 1865 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_COLON3((yyvsp[(2) - (2)].id));
+ /*%
+ $$ = dispatch1(top_const_ref, $2);
+ %*/
+ }
+ break;
+
+ case 113:
+
+/* Line 1806 of yacc.c */
+#line 1873 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_COLON2(0, (yyval.node));
+ /*%
+ $$ = dispatch1(const_ref, $1);
+ %*/
+ }
+ break;
+
+ case 114:
+
+/* Line 1806 of yacc.c */
+#line 1881 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
+ /*%
+ $$ = dispatch2(const_path_ref, $1, $3);
+ %*/
+ }
+ break;
+
+ case 118:
+
+/* Line 1806 of yacc.c */
+#line 1894 "parse.y"
+ {
+ lex_state = EXPR_ENDFN;
+ (yyval.id) = (yyvsp[(1) - (1)].id);
+ }
+ break;
+
+ case 119:
+
+/* Line 1806 of yacc.c */
+#line 1899 "parse.y"
+ {
+ lex_state = EXPR_ENDFN;
+ /*%%%*/
+ (yyval.id) = (yyvsp[(1) - (1)].id);
+ /*%
+ $$ = $1;
+ %*/
+ }
+ break;
+
+ case 122:
+
+/* Line 1806 of yacc.c */
+#line 1914 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_LIT(ID2SYM((yyvsp[(1) - (1)].id)));
+ /*%
+ $$ = dispatch1(symbol_literal, $1);
+ %*/
+ }
+ break;
+
+ case 124:
+
+/* Line 1806 of yacc.c */
+#line 1925 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_UNDEF((yyvsp[(1) - (1)].node));
+ /*%
+ $$ = rb_ary_new3(1, $1);
+ %*/
+ }
+ break;
+
+ case 125:
+
+/* Line 1806 of yacc.c */
+#line 1932 "parse.y"
+ {lex_state = EXPR_FNAME;}
+ break;
+
+ case 126:
+
+/* Line 1806 of yacc.c */
+#line 1933 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = block_append((yyvsp[(1) - (4)].node), NEW_UNDEF((yyvsp[(4) - (4)].node)));
+ /*%
+ rb_ary_push($1, $4);
+ %*/
+ }
+ break;
+
+ case 127:
+
+/* Line 1806 of yacc.c */
+#line 1942 "parse.y"
+ { ifndef_ripper((yyval.id) = '|'); }
+ break;
+
+ case 128:
+
+/* Line 1806 of yacc.c */
+#line 1943 "parse.y"
+ { ifndef_ripper((yyval.id) = '^'); }
+ break;
+
+ case 129:
+
+/* Line 1806 of yacc.c */
+#line 1944 "parse.y"
+ { ifndef_ripper((yyval.id) = '&'); }
+ break;
+
+ case 130:
+
+/* Line 1806 of yacc.c */
+#line 1945 "parse.y"
+ { ifndef_ripper((yyval.id) = tCMP); }
+ break;
+
+ case 131:
+
+/* Line 1806 of yacc.c */
+#line 1946 "parse.y"
+ { ifndef_ripper((yyval.id) = tEQ); }
+ break;
+
+ case 132:
+
+/* Line 1806 of yacc.c */
+#line 1947 "parse.y"
+ { ifndef_ripper((yyval.id) = tEQQ); }
+ break;
+
+ case 133:
+
+/* Line 1806 of yacc.c */
+#line 1948 "parse.y"
+ { ifndef_ripper((yyval.id) = tMATCH); }
+ break;
+
+ case 134:
+
+/* Line 1806 of yacc.c */
+#line 1949 "parse.y"
+ { ifndef_ripper((yyval.id) = tNMATCH); }
+ break;
+
+ case 135:
+
+/* Line 1806 of yacc.c */
+#line 1950 "parse.y"
+ { ifndef_ripper((yyval.id) = '>'); }
+ break;
+
+ case 136:
+
+/* Line 1806 of yacc.c */
+#line 1951 "parse.y"
+ { ifndef_ripper((yyval.id) = tGEQ); }
+ break;
+
+ case 137:
+
+/* Line 1806 of yacc.c */
+#line 1952 "parse.y"
+ { ifndef_ripper((yyval.id) = '<'); }
+ break;
+
+ case 138:
+
+/* Line 1806 of yacc.c */
+#line 1953 "parse.y"
+ { ifndef_ripper((yyval.id) = tLEQ); }
+ break;
+
+ case 139:
+
+/* Line 1806 of yacc.c */
+#line 1954 "parse.y"
+ { ifndef_ripper((yyval.id) = tNEQ); }
+ break;
+
+ case 140:
+
+/* Line 1806 of yacc.c */
+#line 1955 "parse.y"
+ { ifndef_ripper((yyval.id) = tLSHFT); }
+ break;
+
+ case 141:
+
+/* Line 1806 of yacc.c */
+#line 1956 "parse.y"
+ { ifndef_ripper((yyval.id) = tRSHFT); }
+ break;
+
+ case 142:
+
+/* Line 1806 of yacc.c */
+#line 1957 "parse.y"
+ { ifndef_ripper((yyval.id) = '+'); }
+ break;
+
+ case 143:
+
+/* Line 1806 of yacc.c */
+#line 1958 "parse.y"
+ { ifndef_ripper((yyval.id) = '-'); }
+ break;
+
+ case 144:
+
+/* Line 1806 of yacc.c */
+#line 1959 "parse.y"
+ { ifndef_ripper((yyval.id) = '*'); }
+ break;
+
+ case 145:
+
+/* Line 1806 of yacc.c */
+#line 1960 "parse.y"
+ { ifndef_ripper((yyval.id) = '*'); }
+ break;
+
+ case 146:
+
+/* Line 1806 of yacc.c */
+#line 1961 "parse.y"
+ { ifndef_ripper((yyval.id) = '/'); }
+ break;
+
+ case 147:
+
+/* Line 1806 of yacc.c */
+#line 1962 "parse.y"
+ { ifndef_ripper((yyval.id) = '%'); }
+ break;
+
+ case 148:
+
+/* Line 1806 of yacc.c */
+#line 1963 "parse.y"
+ { ifndef_ripper((yyval.id) = tPOW); }
+ break;
+
+ case 149:
+
+/* Line 1806 of yacc.c */
+#line 1964 "parse.y"
+ { ifndef_ripper((yyval.id) = tDSTAR); }
+ break;
+
+ case 150:
+
+/* Line 1806 of yacc.c */
+#line 1965 "parse.y"
+ { ifndef_ripper((yyval.id) = '!'); }
+ break;
+
+ case 151:
+
+/* Line 1806 of yacc.c */
+#line 1966 "parse.y"
+ { ifndef_ripper((yyval.id) = '~'); }
+ break;
+
+ case 152:
+
+/* Line 1806 of yacc.c */
+#line 1967 "parse.y"
+ { ifndef_ripper((yyval.id) = tUPLUS); }
+ break;
+
+ case 153:
+
+/* Line 1806 of yacc.c */
+#line 1968 "parse.y"
+ { ifndef_ripper((yyval.id) = tUMINUS); }
+ break;
+
+ case 154:
+
+/* Line 1806 of yacc.c */
+#line 1969 "parse.y"
+ { ifndef_ripper((yyval.id) = tAREF); }
+ break;
+
+ case 155:
+
+/* Line 1806 of yacc.c */
+#line 1970 "parse.y"
+ { ifndef_ripper((yyval.id) = tASET); }
+ break;
+
+ case 156:
+
+/* Line 1806 of yacc.c */
+#line 1971 "parse.y"
+ { ifndef_ripper((yyval.id) = '`'); }
+ break;
+
+ case 198:
+
+/* Line 1806 of yacc.c */
+#line 1989 "parse.y"
+ {
+ /*%%%*/
+ value_expr((yyvsp[(3) - (3)].node));
+ (yyval.node) = node_assign((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
+ /*%
+ $$ = dispatch2(assign, $1, $3);
+ %*/
+ }
+ break;
+
+ case 199:
+
+/* Line 1806 of yacc.c */
+#line 1998 "parse.y"
+ {
+ /*%%%*/
+ value_expr((yyvsp[(3) - (5)].node));
+ (yyvsp[(3) - (5)].node) = NEW_RESCUE((yyvsp[(3) - (5)].node), NEW_RESBODY(0,(yyvsp[(5) - (5)].node),0), 0);
+ (yyval.node) = node_assign((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].node));
+ /*%
+ $$ = dispatch2(assign, $1, dispatch2(rescue_mod, $3, $5));
+ %*/
+ }
+ break;
+
+ case 200:
+
+/* Line 1806 of yacc.c */
+#line 2008 "parse.y"
+ {
+ value_expr((yyvsp[(3) - (3)].node));
+ (yyval.node) = new_op_assign((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].id), (yyvsp[(3) - (3)].node));
+ }
+ break;
+
+ case 201:
+
+/* Line 1806 of yacc.c */
+#line 2013 "parse.y"
+ {
+ /*%%%*/
+ value_expr((yyvsp[(3) - (5)].node));
+ (yyvsp[(3) - (5)].node) = NEW_RESCUE((yyvsp[(3) - (5)].node), NEW_RESBODY(0,(yyvsp[(5) - (5)].node),0), 0);
+ /*%
+ $3 = dispatch2(rescue_mod, $3, $5);
+ %*/
+ (yyval.node) = new_op_assign((yyvsp[(1) - (5)].node), (yyvsp[(2) - (5)].id), (yyvsp[(3) - (5)].node));
+ }
+ break;
+
+ case 202:
+
+/* Line 1806 of yacc.c */
+#line 2023 "parse.y"
+ {
+ /*%%%*/
+ NODE *args;
+
+ value_expr((yyvsp[(6) - (6)].node));
+ if (!(yyvsp[(3) - (6)].node)) (yyvsp[(3) - (6)].node) = NEW_ZARRAY();
+ if (nd_type((yyvsp[(3) - (6)].node)) == NODE_BLOCK_PASS) {
+ args = NEW_ARGSCAT((yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node));
+ }
+ else {
+ args = arg_concat((yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node));
+ }
+ if ((yyvsp[(5) - (6)].id) == tOROP) {
+ (yyvsp[(5) - (6)].id) = 0;
+ }
+ else if ((yyvsp[(5) - (6)].id) == tANDOP) {
+ (yyvsp[(5) - (6)].id) = 1;
+ }
+ (yyval.node) = NEW_OP_ASGN1((yyvsp[(1) - (6)].node), (yyvsp[(5) - (6)].id), args);
+ fixpos((yyval.node), (yyvsp[(1) - (6)].node));
+ /*%
+ $1 = dispatch2(aref_field, $1, escape_Qundef($3));
+ $$ = dispatch3(opassign, $1, $5, $6);
+ %*/
+ }
+ break;
+
+ case 203:
+
+/* Line 1806 of yacc.c */
+#line 2049 "parse.y"
+ {
+ value_expr((yyvsp[(5) - (5)].node));
+ (yyval.node) = new_attr_op_assign((yyvsp[(1) - (5)].node), ripper_id2sym('.'), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
+ }
+ break;
+
+ case 204:
+
+/* Line 1806 of yacc.c */
+#line 2054 "parse.y"
+ {
+ value_expr((yyvsp[(5) - (5)].node));
+ (yyval.node) = new_attr_op_assign((yyvsp[(1) - (5)].node), ripper_id2sym('.'), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
+ }
+ break;
+
+ case 205:
+
+/* Line 1806 of yacc.c */
+#line 2059 "parse.y"
+ {
+ value_expr((yyvsp[(5) - (5)].node));
+ (yyval.node) = new_attr_op_assign((yyvsp[(1) - (5)].node), ID2SYM(idCOLON2), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
+ }
+ break;
+
+ case 206:
+
+/* Line 1806 of yacc.c */
+#line 2064 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_COLON2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id));
+ (yyval.node) = new_const_op_assign((yyval.node), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
+ /*%
+ $$ = dispatch2(const_path_field, $1, $3);
+ $$ = dispatch3(opassign, $$, $4, $5);
+ %*/
+ }
+ break;
+
+ case 207:
+
+/* Line 1806 of yacc.c */
+#line 2074 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_COLON3((yyvsp[(2) - (4)].id));
+ (yyval.node) = new_const_op_assign((yyval.node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
+ /*%
+ $$ = dispatch1(top_const_field, $2);
+ $$ = dispatch3(opassign, $$, $3, $4);
+ %*/
+ }
+ break;
+
+ case 208:
+
+/* Line 1806 of yacc.c */
+#line 2084 "parse.y"
+ {
+ /*%%%*/
+ rb_backref_error((yyvsp[(1) - (3)].node));
+ (yyval.node) = NEW_BEGIN(0);
+ /*%
+ $$ = dispatch1(var_field, $1);
+ $$ = dispatch3(opassign, $$, $2, $3);
+ $$ = dispatch1(assign_error, $$);
+ ripper_error();
+ %*/
+ }
+ break;
+
+ case 209:
+
+/* Line 1806 of yacc.c */
+#line 2096 "parse.y"
+ {
+ /*%%%*/
+ value_expr((yyvsp[(1) - (3)].node));
+ value_expr((yyvsp[(3) - (3)].node));
+ (yyval.node) = NEW_DOT2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
+ if ((yyvsp[(1) - (3)].node) && nd_type((yyvsp[(1) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(1) - (3)].node)->nd_lit) &&
+ (yyvsp[(3) - (3)].node) && nd_type((yyvsp[(3) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(3) - (3)].node)->nd_lit)) {
+ deferred_nodes = list_append(deferred_nodes, (yyval.node));
+ }
+ /*%
+ $$ = dispatch2(dot2, $1, $3);
+ %*/
+ }
+ break;
+
+ case 210:
+
+/* Line 1806 of yacc.c */
+#line 2110 "parse.y"
+ {
+ /*%%%*/
+ value_expr((yyvsp[(1) - (3)].node));
+ value_expr((yyvsp[(3) - (3)].node));
+ (yyval.node) = NEW_DOT3((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
+ if ((yyvsp[(1) - (3)].node) && nd_type((yyvsp[(1) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(1) - (3)].node)->nd_lit) &&
+ (yyvsp[(3) - (3)].node) && nd_type((yyvsp[(3) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(3) - (3)].node)->nd_lit)) {
+ deferred_nodes = list_append(deferred_nodes, (yyval.node));
+ }
+ /*%
+ $$ = dispatch2(dot3, $1, $3);
+ %*/
+ }
+ break;
+
+ case 211:
+
+/* Line 1806 of yacc.c */
+#line 2124 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '+', (yyvsp[(3) - (3)].node));
+ /*%
+ $$ = dispatch3(binary, $1, ID2SYM('+'), $3);
+ %*/
+ }
+ break;
+
+ case 212:
+
+/* Line 1806 of yacc.c */
+#line 2132 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '-', (yyvsp[(3) - (3)].node));
+ /*%
+ $$ = dispatch3(binary, $1, ID2SYM('-'), $3);
+ %*/
+ }
+ break;
+
+ case 213:
+
+/* Line 1806 of yacc.c */
+#line 2140 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '*', (yyvsp[(3) - (3)].node));
+ /*%
+ $$ = dispatch3(binary, $1, ID2SYM('*'), $3);
+ %*/
+ }
+ break;
+
+ case 214:
+
+/* Line 1806 of yacc.c */
+#line 2148 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '/', (yyvsp[(3) - (3)].node));
+ /*%
+ $$ = dispatch3(binary, $1, ID2SYM('/'), $3);
+ %*/
+ }
+ break;
+
+ case 215:
+
+/* Line 1806 of yacc.c */
+#line 2156 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '%', (yyvsp[(3) - (3)].node));
+ /*%
+ $$ = dispatch3(binary, $1, ID2SYM('%'), $3);
+ %*/
+ }
+ break;
+
+ case 216:
+
+/* Line 1806 of yacc.c */
+#line 2164 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tPOW, (yyvsp[(3) - (3)].node));
+ /*%
+ $$ = dispatch3(binary, $1, ID2SYM(idPow), $3);
+ %*/
+ }
+ break;
+
+ case 217:
+
+/* Line 1806 of yacc.c */
+#line 2172 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_CALL(call_bin_op((yyvsp[(2) - (4)].node), tPOW, (yyvsp[(4) - (4)].node)), tUMINUS, 0);
+ /*%
+ $$ = dispatch3(binary, $2, ID2SYM(idPow), $4);
+ $$ = dispatch2(unary, ID2SYM(idUMinus), $$);
+ %*/
+ }
+ break;
+
+ case 218:
+
+/* Line 1806 of yacc.c */
+#line 2181 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = call_uni_op((yyvsp[(2) - (2)].node), tUPLUS);
+ /*%
+ $$ = dispatch2(unary, ID2SYM(idUPlus), $2);
+ %*/
+ }
+ break;
+
+ case 219:
+
+/* Line 1806 of yacc.c */
+#line 2189 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = call_uni_op((yyvsp[(2) - (2)].node), tUMINUS);
+ /*%
+ $$ = dispatch2(unary, ID2SYM(idUMinus), $2);
+ %*/
+ }
+ break;
+
+ case 220:
+
+/* Line 1806 of yacc.c */
+#line 2197 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '|', (yyvsp[(3) - (3)].node));
+ /*%
+ $$ = dispatch3(binary, $1, ID2SYM('|'), $3);
+ %*/
+ }
+ break;
+
+ case 221:
+
+/* Line 1806 of yacc.c */
+#line 2205 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '^', (yyvsp[(3) - (3)].node));
+ /*%
+ $$ = dispatch3(binary, $1, ID2SYM('^'), $3);
+ %*/
+ }
+ break;
+
+ case 222:
+
+/* Line 1806 of yacc.c */
+#line 2213 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '&', (yyvsp[(3) - (3)].node));
+ /*%
+ $$ = dispatch3(binary, $1, ID2SYM('&'), $3);
+ %*/
+ }
+ break;
+
+ case 223:
+
+/* Line 1806 of yacc.c */
+#line 2221 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tCMP, (yyvsp[(3) - (3)].node));
+ /*%
+ $$ = dispatch3(binary, $1, ID2SYM(idCmp), $3);
+ %*/
+ }
+ break;
+
+ case 224:
+
+/* Line 1806 of yacc.c */
+#line 2229 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '>', (yyvsp[(3) - (3)].node));
+ /*%
+ $$ = dispatch3(binary, $1, ID2SYM('>'), $3);
+ %*/
+ }
+ break;
+
+ case 225:
+
+/* Line 1806 of yacc.c */
+#line 2237 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tGEQ, (yyvsp[(3) - (3)].node));
+ /*%
+ $$ = dispatch3(binary, $1, ID2SYM(idGE), $3);
+ %*/
+ }
+ break;
+
+ case 226:
+
+/* Line 1806 of yacc.c */
+#line 2245 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '<', (yyvsp[(3) - (3)].node));
+ /*%
+ $$ = dispatch3(binary, $1, ID2SYM('<'), $3);
+ %*/
+ }
+ break;
+
+ case 227:
+
+/* Line 1806 of yacc.c */
+#line 2253 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tLEQ, (yyvsp[(3) - (3)].node));
+ /*%
+ $$ = dispatch3(binary, $1, ID2SYM(idLE), $3);
+ %*/
+ }
+ break;
+
+ case 228:
+
+/* Line 1806 of yacc.c */
+#line 2261 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tEQ, (yyvsp[(3) - (3)].node));
+ /*%
+ $$ = dispatch3(binary, $1, ID2SYM(idEq), $3);
+ %*/
+ }
+ break;
+
+ case 229:
+
+/* Line 1806 of yacc.c */
+#line 2269 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tEQQ, (yyvsp[(3) - (3)].node));
+ /*%
+ $$ = dispatch3(binary, $1, ID2SYM(idEqq), $3);
+ %*/
+ }
+ break;
+
+ case 230:
+
+/* Line 1806 of yacc.c */
+#line 2277 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tNEQ, (yyvsp[(3) - (3)].node));
+ /*%
+ $$ = dispatch3(binary, $1, ID2SYM(idNeq), $3);
+ %*/
+ }
+ break;
+
+ case 231:
+
+/* Line 1806 of yacc.c */
+#line 2285 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = match_op((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
+ if (nd_type((yyvsp[(1) - (3)].node)) == NODE_LIT && RB_TYPE_P((yyvsp[(1) - (3)].node)->nd_lit, T_REGEXP)) {
+ (yyval.node) = reg_named_capture_assign((yyvsp[(1) - (3)].node)->nd_lit, (yyval.node));
+ }
+ /*%
+ $$ = dispatch3(binary, $1, ID2SYM(idEqTilde), $3);
+ %*/
+ }
+ break;
+
+ case 232:
+
+/* Line 1806 of yacc.c */
+#line 2296 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tNMATCH, (yyvsp[(3) - (3)].node));
+ /*%
+ $$ = dispatch3(binary, $1, ID2SYM(idNeqTilde), $3);
+ %*/
+ }
+ break;
+
+ case 233:
+
+/* Line 1806 of yacc.c */
+#line 2304 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = call_uni_op(cond((yyvsp[(2) - (2)].node)), '!');
+ /*%
+ $$ = dispatch2(unary, ID2SYM('!'), $2);
+ %*/
+ }
+ break;
+
+ case 234:
+
+/* Line 1806 of yacc.c */
+#line 2312 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = call_uni_op((yyvsp[(2) - (2)].node), '~');
+ /*%
+ $$ = dispatch2(unary, ID2SYM('~'), $2);
+ %*/
+ }
+ break;
+
+ case 235:
+
+/* Line 1806 of yacc.c */
+#line 2320 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tLSHFT, (yyvsp[(3) - (3)].node));
+ /*%
+ $$ = dispatch3(binary, $1, ID2SYM(idLTLT), $3);
+ %*/
+ }
+ break;
+
+ case 236:
+
+/* Line 1806 of yacc.c */
+#line 2328 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tRSHFT, (yyvsp[(3) - (3)].node));
+ /*%
+ $$ = dispatch3(binary, $1, ID2SYM(idGTGT), $3);
+ %*/
+ }
+ break;
+
+ case 237:
+
+/* Line 1806 of yacc.c */
+#line 2336 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = logop(NODE_AND, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
+ /*%
+ $$ = dispatch3(binary, $1, ID2SYM(idANDOP), $3);
+ %*/
+ }
+ break;
+
+ case 238:
+
+/* Line 1806 of yacc.c */
+#line 2344 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = logop(NODE_OR, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
+ /*%
+ $$ = dispatch3(binary, $1, ID2SYM(idOROP), $3);
+ %*/
+ }
+ break;
+
+ case 239:
+
+/* Line 1806 of yacc.c */
+#line 2351 "parse.y"
+ {in_defined = 1;}
+ break;
+
+ case 240:
+
+/* Line 1806 of yacc.c */
+#line 2352 "parse.y"
+ {
+ in_defined = 0;
+ /*%%%*/
+ (yyval.node) = new_defined((yyvsp[(4) - (4)].node));
+ /*%
+ $$ = dispatch1(defined, $4);
+ %*/
+ }
+ break;
+
+ case 241:
+
+/* Line 1806 of yacc.c */
+#line 2361 "parse.y"
+ {
+ (yyval.val) = cond_stack;
+ cond_stack = 0;
+ COND_PUSH(1);
+ }
+ break;
+
+ case 242:
+
+/* Line 1806 of yacc.c */
+#line 2367 "parse.y"
+ {
+ cond_stack = (yyvsp[(3) - (6)].val);
+ }
+ break;
+
+ case 243:
+
+/* Line 1806 of yacc.c */
+#line 2371 "parse.y"
+ {
+ /*%%%*/
+ value_expr((yyvsp[(1) - (8)].node));
+ (yyval.node) = NEW_IF(cond((yyvsp[(1) - (8)].node)), (yyvsp[(4) - (8)].node), (yyvsp[(8) - (8)].node));
+ fixpos((yyval.node), (yyvsp[(1) - (8)].node));
+ /*%
+ $$ = dispatch3(ifop, $1, $4, $8);
+ %*/
+ }
+ break;
+
+ case 244:
+
+/* Line 1806 of yacc.c */
+#line 2381 "parse.y"
+ {
+ (yyval.node) = (yyvsp[(1) - (1)].node);
+ }
+ break;
+
+ case 245:
+
+/* Line 1806 of yacc.c */
+#line 2387 "parse.y"
+ {
+ /*%%%*/
+ value_expr((yyvsp[(1) - (1)].node));
+ (yyval.node) = (yyvsp[(1) - (1)].node);
+ if (!(yyval.node)) (yyval.node) = NEW_NIL();
+ /*%
+ $$ = $1;
+ %*/
+ }
+ break;
+
+ case 247:
+
+/* Line 1806 of yacc.c */
+#line 2400 "parse.y"
+ {
+ (yyval.node) = (yyvsp[(1) - (2)].node);
+ }
+ break;
+
+ case 248:
+
+/* Line 1806 of yacc.c */
+#line 2404 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = (yyvsp[(3) - (4)].node) ? arg_append((yyvsp[(1) - (4)].node), new_hash((yyvsp[(3) - (4)].node))) : (yyvsp[(1) - (4)].node);
+ /*%
+ $$ = arg_add_assocs($1, $3);
+ %*/
+ }
+ break;
+
+ case 249:
+
+/* Line 1806 of yacc.c */
+#line 2412 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = (yyvsp[(1) - (2)].node) ? NEW_LIST(new_hash((yyvsp[(1) - (2)].node))) : 0;
+ /*%
+ $$ = arg_add_assocs(arg_new(), $1);
+ %*/
+ }
+ break;
+
+ case 250:
+
+/* Line 1806 of yacc.c */
+#line 2422 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = (yyvsp[(2) - (3)].node);
+ /*%
+ $$ = dispatch1(arg_paren, escape_Qundef($2));
+ %*/
+ }
+ break;
+
+ case 255:
+
+/* Line 1806 of yacc.c */
+#line 2438 "parse.y"
+ {
+ (yyval.node) = (yyvsp[(1) - (2)].node);
+ }
+ break;
+
+ case 256:
+
+/* Line 1806 of yacc.c */
+#line 2442 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = (yyvsp[(3) - (4)].node) ? arg_append((yyvsp[(1) - (4)].node), new_hash((yyvsp[(3) - (4)].node))) : (yyvsp[(1) - (4)].node);
+ /*%
+ $$ = arg_add_assocs($1, $3);
+ %*/
+ }
+ break;
+
+ case 257:
+
+/* Line 1806 of yacc.c */
+#line 2450 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = (yyvsp[(1) - (2)].node) ? NEW_LIST(new_hash((yyvsp[(1) - (2)].node))) : 0;
+ /*%
+ $$ = arg_add_assocs(arg_new(), $1);
+ %*/
+ }
+ break;
+
+ case 258:
+
+/* Line 1806 of yacc.c */
+#line 2460 "parse.y"
+ {
+ /*%%%*/
+ value_expr((yyvsp[(1) - (1)].node));
+ (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
+ /*%
+ $$ = arg_add(arg_new(), $1);
+ %*/
+ }
+ break;
+
+ case 259:
+
+/* Line 1806 of yacc.c */
+#line 2469 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = arg_blk_pass((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
+ /*%
+ $$ = arg_add_optblock($1, $2);
+ %*/
+ }
+ break;
+
+ case 260:
+
+/* Line 1806 of yacc.c */
+#line 2477 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_LIST((yyvsp[(1) - (2)].node) ? new_hash((yyvsp[(1) - (2)].node)) : 0);
+ (yyval.node) = arg_blk_pass((yyval.node), (yyvsp[(2) - (2)].node));
+ /*%
+ $$ = arg_add_assocs(arg_new(), $1);
+ $$ = arg_add_optblock($$, $2);
+ %*/
+ }
+ break;
+
+ case 261:
+
+/* Line 1806 of yacc.c */
+#line 2487 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = (yyvsp[(3) - (4)].node) ? arg_append((yyvsp[(1) - (4)].node), new_hash((yyvsp[(3) - (4)].node))) : (yyvsp[(1) - (4)].node);
+ (yyval.node) = arg_blk_pass((yyval.node), (yyvsp[(4) - (4)].node));
+ /*%
+ $$ = arg_add_optblock(arg_add_assocs($1, $3), $4);
+ %*/
+ }
+ break;
+
+ case 263:
+
+/* Line 1806 of yacc.c */
+#line 2504 "parse.y"
+ {
+ (yyval.val) = cmdarg_stack;
+ CMDARG_PUSH(1);
+ }
+ break;
+
+ case 264:
+
+/* Line 1806 of yacc.c */
+#line 2509 "parse.y"
+ {
+ /* CMDARG_POP() */
+ cmdarg_stack = (yyvsp[(1) - (2)].val);
+ (yyval.node) = (yyvsp[(2) - (2)].node);
+ }
+ break;
+
+ case 265:
+
+/* Line 1806 of yacc.c */
+#line 2517 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_BLOCK_PASS((yyvsp[(2) - (2)].node));
+ /*%
+ $$ = $2;
+ %*/
+ }
+ break;
+
+ case 266:
+
+/* Line 1806 of yacc.c */
+#line 2527 "parse.y"
+ {
+ (yyval.node) = (yyvsp[(2) - (2)].node);
+ }
+ break;
+
+ case 267:
+
+/* Line 1806 of yacc.c */
+#line 2531 "parse.y"
+ {
+ (yyval.node) = 0;
+ }
+ break;
+
+ case 268:
+
+/* Line 1806 of yacc.c */
+#line 2537 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
+ /*%
+ $$ = arg_add(arg_new(), $1);
+ %*/
+ }
+ break;
+
+ case 269:
+
+/* Line 1806 of yacc.c */
+#line 2545 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_SPLAT((yyvsp[(2) - (2)].node));
+ /*%
+ $$ = arg_add_star(arg_new(), $2);
+ %*/
+ }
+ break;
+
+ case 270:
+
+/* Line 1806 of yacc.c */
+#line 2553 "parse.y"
+ {
+ /*%%%*/
+ NODE *n1;
+ if ((n1 = splat_array((yyvsp[(1) - (3)].node))) != 0) {
+ (yyval.node) = list_append(n1, (yyvsp[(3) - (3)].node));
+ }
+ else {
+ (yyval.node) = arg_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
+ }
+ /*%
+ $$ = arg_add($1, $3);
+ %*/
+ }
+ break;
+
+ case 271:
+
+/* Line 1806 of yacc.c */
+#line 2567 "parse.y"
+ {
+ /*%%%*/
+ NODE *n1;
+ if ((nd_type((yyvsp[(4) - (4)].node)) == NODE_ARRAY) && (n1 = splat_array((yyvsp[(1) - (4)].node))) != 0) {
+ (yyval.node) = list_concat(n1, (yyvsp[(4) - (4)].node));
+ }
+ else {
+ (yyval.node) = arg_concat((yyvsp[(1) - (4)].node), (yyvsp[(4) - (4)].node));
+ }
+ /*%
+ $$ = arg_add_star($1, $4);
+ %*/
+ }
+ break;
+
+ case 274:
+
+/* Line 1806 of yacc.c */
+#line 2587 "parse.y"
+ {
+ /*%%%*/
+ NODE *n1;
+ if ((n1 = splat_array((yyvsp[(1) - (3)].node))) != 0) {
+ (yyval.node) = list_append(n1, (yyvsp[(3) - (3)].node));
+ }
+ else {
+ (yyval.node) = arg_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
+ }
+ /*%
+ $$ = mrhs_add(args2mrhs($1), $3);
+ %*/
+ }
+ break;
+
+ case 275:
+
+/* Line 1806 of yacc.c */
+#line 2601 "parse.y"
+ {
+ /*%%%*/
+ NODE *n1;
+ if (nd_type((yyvsp[(4) - (4)].node)) == NODE_ARRAY &&
+ (n1 = splat_array((yyvsp[(1) - (4)].node))) != 0) {
+ (yyval.node) = list_concat(n1, (yyvsp[(4) - (4)].node));
+ }
+ else {
+ (yyval.node) = arg_concat((yyvsp[(1) - (4)].node), (yyvsp[(4) - (4)].node));
+ }
+ /*%
+ $$ = mrhs_add_star(args2mrhs($1), $4);
+ %*/
+ }
+ break;
+
+ case 276:
+
+/* Line 1806 of yacc.c */
+#line 2616 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_SPLAT((yyvsp[(2) - (2)].node));
+ /*%
+ $$ = mrhs_add_star(mrhs_new(), $2);
+ %*/
+ }
+ break;
+
+ case 287:
+
+/* Line 1806 of yacc.c */
+#line 2636 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_FCALL((yyvsp[(1) - (1)].id), 0);
+ /*%
+ $$ = method_arg(dispatch1(fcall, $1), arg_new());
+ %*/
+ }
+ break;
+
+ case 288:
+
+/* Line 1806 of yacc.c */
+#line 2644 "parse.y"
+ {
+ (yyvsp[(1) - (1)].val) = cmdarg_stack;
+ cmdarg_stack = 0;
+ /*%%%*/
+ (yyval.num) = ruby_sourceline;
+ /*%
+ %*/
+ }
+ break;
+
+ case 289:
+
+/* Line 1806 of yacc.c */
+#line 2654 "parse.y"
+ {
+ cmdarg_stack = (yyvsp[(1) - (4)].val);
+ /*%%%*/
+ if ((yyvsp[(3) - (4)].node) == NULL) {
+ (yyval.node) = NEW_NIL();
+ }
+ else {
+ if (nd_type((yyvsp[(3) - (4)].node)) == NODE_RESCUE ||
+ nd_type((yyvsp[(3) - (4)].node)) == NODE_ENSURE)
+ nd_set_line((yyvsp[(3) - (4)].node), (yyvsp[(2) - (4)].num));
+ (yyval.node) = NEW_BEGIN((yyvsp[(3) - (4)].node));
+ }
+ nd_set_line((yyval.node), (yyvsp[(2) - (4)].num));
+ /*%
+ $$ = dispatch1(begin, $3);
+ %*/
+ }
+ break;
+
+ case 290:
+
+/* Line 1806 of yacc.c */
+#line 2671 "parse.y"
+ {lex_state = EXPR_ENDARG;}
+ break;
+
+ case 291:
+
+/* Line 1806 of yacc.c */
+#line 2672 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = 0;
+ /*%
+ $$ = dispatch1(paren, 0);
+ %*/
+ }
+ break;
+
+ case 292:
+
+/* Line 1806 of yacc.c */
+#line 2680 "parse.y"
+ {
+ (yyvsp[(1) - (1)].val) = cmdarg_stack;
+ cmdarg_stack = 0;
+ }
+ break;
+
+ case 293:
+
+/* Line 1806 of yacc.c */
+#line 2684 "parse.y"
+ {lex_state = EXPR_ENDARG;}
+ break;
+
+ case 294:
+
+/* Line 1806 of yacc.c */
+#line 2685 "parse.y"
+ {
+ cmdarg_stack = (yyvsp[(1) - (5)].val);
+ /*%%%*/
+ (yyval.node) = (yyvsp[(3) - (5)].node);
+ /*%
+ $$ = dispatch1(paren, $3);
+ %*/
+ }
+ break;
+
+ case 295:
+
+/* Line 1806 of yacc.c */
+#line 2694 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = (yyvsp[(2) - (3)].node);
+ /*%
+ $$ = dispatch1(paren, $2);
+ %*/
+ }
+ break;
+
+ case 296:
+
+/* Line 1806 of yacc.c */
+#line 2702 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
+ /*%
+ $$ = dispatch2(const_path_ref, $1, $3);
+ %*/
+ }
+ break;
+
+ case 297:
+
+/* Line 1806 of yacc.c */
+#line 2710 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_COLON3((yyvsp[(2) - (2)].id));
+ /*%
+ $$ = dispatch1(top_const_ref, $2);
+ %*/
+ }
+ break;
+
+ case 298:
+
+/* Line 1806 of yacc.c */
+#line 2718 "parse.y"
+ {
+ /*%%%*/
+ if ((yyvsp[(2) - (3)].node) == 0) {
+ (yyval.node) = NEW_ZARRAY(); /* zero length array*/
+ }
+ else {
+ (yyval.node) = (yyvsp[(2) - (3)].node);
+ }
+ /*%
+ $$ = dispatch1(array, escape_Qundef($2));
+ %*/
+ }
+ break;
+
+ case 299:
+
+/* Line 1806 of yacc.c */
+#line 2731 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = new_hash((yyvsp[(2) - (3)].node));
+ /*%
+ $$ = dispatch1(hash, escape_Qundef($2));
+ %*/
+ }
+ break;
+
+ case 300:
+
+/* Line 1806 of yacc.c */
+#line 2739 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_RETURN(0);
+ /*%
+ $$ = dispatch0(return0);
+ %*/
+ }
+ break;
+
+ case 301:
+
+/* Line 1806 of yacc.c */
+#line 2747 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = new_yield((yyvsp[(3) - (4)].node));
+ /*%
+ $$ = dispatch1(yield, dispatch1(paren, $3));
+ %*/
+ }
+ break;
+
+ case 302:
+
+/* Line 1806 of yacc.c */
+#line 2755 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_YIELD(0);
+ /*%
+ $$ = dispatch1(yield, dispatch1(paren, arg_new()));
+ %*/
+ }
+ break;
+
+ case 303:
+
+/* Line 1806 of yacc.c */
+#line 2763 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_YIELD(0);
+ /*%
+ $$ = dispatch0(yield0);
+ %*/
+ }
+ break;
+
+ case 304:
+
+/* Line 1806 of yacc.c */
+#line 2770 "parse.y"
+ {in_defined = 1;}
+ break;
+
+ case 305:
+
+/* Line 1806 of yacc.c */
+#line 2771 "parse.y"
+ {
+ in_defined = 0;
+ /*%%%*/
+ (yyval.node) = new_defined((yyvsp[(5) - (6)].node));
+ /*%
+ $$ = dispatch1(defined, $5);
+ %*/
+ }
+ break;
+
+ case 306:
+
+/* Line 1806 of yacc.c */
+#line 2780 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = call_uni_op(cond((yyvsp[(3) - (4)].node)), '!');
+ /*%
+ $$ = dispatch2(unary, ripper_intern("not"), $3);
+ %*/
+ }
+ break;
+
+ case 307:
+
+/* Line 1806 of yacc.c */
+#line 2788 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = call_uni_op(cond(NEW_NIL()), '!');
+ /*%
+ $$ = dispatch2(unary, ripper_intern("not"), Qnil);
+ %*/
+ }
+ break;
+
+ case 308:
+
+/* Line 1806 of yacc.c */
+#line 2796 "parse.y"
+ {
+ /*%%%*/
+ (yyvsp[(2) - (2)].node)->nd_iter = (yyvsp[(1) - (2)].node);
+ (yyval.node) = (yyvsp[(2) - (2)].node);
+ /*%
+ $$ = method_arg(dispatch1(fcall, $1), arg_new());
+ $$ = method_add_block($$, $2);
+ %*/
+ }
+ break;
+
+ case 310:
+
+/* Line 1806 of yacc.c */
+#line 2807 "parse.y"
+ {
+ /*%%%*/
+ block_dup_check((yyvsp[(1) - (2)].node)->nd_args, (yyvsp[(2) - (2)].node));
+ (yyvsp[(2) - (2)].node)->nd_iter = (yyvsp[(1) - (2)].node);
+ (yyval.node) = (yyvsp[(2) - (2)].node);
+ /*%
+ $$ = method_add_block($1, $2);
+ %*/
+ }
+ break;
+
+ case 311:
+
+/* Line 1806 of yacc.c */
+#line 2817 "parse.y"
+ {
+ (yyval.node) = (yyvsp[(2) - (2)].node);
+ }
+ break;
+
+ case 312:
+
+/* Line 1806 of yacc.c */
+#line 2824 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_IF(cond((yyvsp[(2) - (6)].node)), (yyvsp[(4) - (6)].node), (yyvsp[(5) - (6)].node));
+ fixpos((yyval.node), (yyvsp[(2) - (6)].node));
+ /*%
+ $$ = dispatch3(if, $2, $4, escape_Qundef($5));
+ %*/
+ }
+ break;
+
+ case 313:
+
+/* Line 1806 of yacc.c */
+#line 2836 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_UNLESS(cond((yyvsp[(2) - (6)].node)), (yyvsp[(4) - (6)].node), (yyvsp[(5) - (6)].node));
+ fixpos((yyval.node), (yyvsp[(2) - (6)].node));
+ /*%
+ $$ = dispatch3(unless, $2, $4, escape_Qundef($5));
+ %*/
+ }
+ break;
+
+ case 314:
+
+/* Line 1806 of yacc.c */
+#line 2844 "parse.y"
+ {COND_PUSH(1);}
+ break;
+
+ case 315:
+
+/* Line 1806 of yacc.c */
+#line 2844 "parse.y"
+ {COND_POP();}
+ break;
+
+ case 316:
+
+/* Line 1806 of yacc.c */
+#line 2847 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_WHILE(cond((yyvsp[(3) - (7)].node)), (yyvsp[(6) - (7)].node), 1);
+ fixpos((yyval.node), (yyvsp[(3) - (7)].node));
+ /*%
+ $$ = dispatch2(while, $3, $6);
+ %*/
+ }
+ break;
+
+ case 317:
+
+/* Line 1806 of yacc.c */
+#line 2855 "parse.y"
+ {COND_PUSH(1);}
+ break;
+
+ case 318:
+
+/* Line 1806 of yacc.c */
+#line 2855 "parse.y"
+ {COND_POP();}
+ break;
+
+ case 319:
+
+/* Line 1806 of yacc.c */
+#line 2858 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_UNTIL(cond((yyvsp[(3) - (7)].node)), (yyvsp[(6) - (7)].node), 1);
+ fixpos((yyval.node), (yyvsp[(3) - (7)].node));
+ /*%
+ $$ = dispatch2(until, $3, $6);
+ %*/
+ }
+ break;
+
+ case 320:
+
+/* Line 1806 of yacc.c */
+#line 2869 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_CASE((yyvsp[(2) - (5)].node), (yyvsp[(4) - (5)].node));
+ fixpos((yyval.node), (yyvsp[(2) - (5)].node));
+ /*%
+ $$ = dispatch2(case, $2, $4);
+ %*/
+ }
+ break;
+
+ case 321:
+
+/* Line 1806 of yacc.c */
+#line 2878 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_CASE(0, (yyvsp[(3) - (4)].node));
+ /*%
+ $$ = dispatch2(case, Qnil, $3);
+ %*/
+ }
+ break;
+
+ case 322:
+
+/* Line 1806 of yacc.c */
+#line 2886 "parse.y"
+ {COND_PUSH(1);}
+ break;
+
+ case 323:
+
+/* Line 1806 of yacc.c */
+#line 2888 "parse.y"
+ {COND_POP();}
+ break;
+
+ case 324:
+
+/* Line 1806 of yacc.c */
+#line 2891 "parse.y"
+ {
+ /*%%%*/
+ /*
+ * for a, b, c in e
+ * #=>
+ * e.each{|*x| a, b, c = x
+ *
+ * for a in e
+ * #=>
+ * e.each{|x| a, = x}
+ */
+ ID id = internal_id();
+ ID *tbl = ALLOC_N(ID, 2);
+ NODE *m = NEW_ARGS_AUX(0, 0);
+ NODE *args, *scope;
+
+ if (nd_type((yyvsp[(2) - (9)].node)) == NODE_MASGN) {
+ /* if args.length == 1 && args[0].kind_of?(Array)
+ * args = args[0]
+ * end
+ */
+ NODE *one = NEW_LIST(NEW_LIT(INT2FIX(1)));
+ NODE *zero = NEW_LIST(NEW_LIT(INT2FIX(0)));
+ m->nd_next = block_append(
+ NEW_IF(
+ NEW_NODE(NODE_AND,
+ NEW_CALL(NEW_CALL(NEW_DVAR(id), idLength, 0),
+ idEq, one),
+ NEW_CALL(NEW_CALL(NEW_DVAR(id), idAREF, zero),
+ rb_intern("kind_of?"), NEW_LIST(NEW_LIT(rb_cArray))),
+ 0),
+ NEW_DASGN_CURR(id,
+ NEW_CALL(NEW_DVAR(id), idAREF, zero)),
+ 0),
+ node_assign((yyvsp[(2) - (9)].node), NEW_DVAR(id)));
+
+ args = new_args(m, 0, id, 0, new_args_tail(0, 0, 0));
+ }
+ else {
+ if (nd_type((yyvsp[(2) - (9)].node)) == NODE_LASGN ||
+ nd_type((yyvsp[(2) - (9)].node)) == NODE_DASGN ||
+ nd_type((yyvsp[(2) - (9)].node)) == NODE_DASGN_CURR) {
+ (yyvsp[(2) - (9)].node)->nd_value = NEW_DVAR(id);
+ m->nd_plen = 1;
+ m->nd_next = (yyvsp[(2) - (9)].node);
+ args = new_args(m, 0, 0, 0, new_args_tail(0, 0, 0));
+ }
+ else {
+ m->nd_next = node_assign(NEW_MASGN(NEW_LIST((yyvsp[(2) - (9)].node)), 0), NEW_DVAR(id));
+ args = new_args(m, 0, id, 0, new_args_tail(0, 0, 0));
+ }
+ }
+ scope = NEW_NODE(NODE_SCOPE, tbl, (yyvsp[(8) - (9)].node), args);
+ tbl[0] = 1; tbl[1] = id;
+ (yyval.node) = NEW_FOR(0, (yyvsp[(5) - (9)].node), scope);
+ fixpos((yyval.node), (yyvsp[(2) - (9)].node));
+ /*%
+ $$ = dispatch3(for, $2, $5, $8);
+ %*/
+ }
+ break;
+
+ case 325:
+
+/* Line 1806 of yacc.c */
+#line 2952 "parse.y"
+ {
+ if (in_def || in_single)
+ yyerror("class definition in method body");
+ local_push(0);
+ /*%%%*/
+ (yyval.num) = ruby_sourceline;
+ /*%
+ %*/
+ }
+ break;
+
+ case 326:
+
+/* Line 1806 of yacc.c */
+#line 2963 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_CLASS((yyvsp[(2) - (6)].node), (yyvsp[(5) - (6)].node), (yyvsp[(3) - (6)].node));
+ nd_set_line((yyval.node), (yyvsp[(4) - (6)].num));
+ /*%
+ $$ = dispatch3(class, $2, $3, $5);
+ %*/
+ local_pop();
+ }
+ break;
+
+ case 327:
+
+/* Line 1806 of yacc.c */
+#line 2973 "parse.y"
+ {
+ (yyval.num) = in_def;
+ in_def = 0;
+ }
+ break;
+
+ case 328:
+
+/* Line 1806 of yacc.c */
+#line 2978 "parse.y"
+ {
+ (yyval.num) = in_single;
+ in_single = 0;
+ local_push(0);
+ }
+ break;
+
+ case 329:
+
+/* Line 1806 of yacc.c */
+#line 2985 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_SCLASS((yyvsp[(3) - (8)].node), (yyvsp[(7) - (8)].node));
+ fixpos((yyval.node), (yyvsp[(3) - (8)].node));
+ /*%
+ $$ = dispatch2(sclass, $3, $7);
+ %*/
+ local_pop();
+ in_def = (yyvsp[(4) - (8)].num);
+ in_single = (yyvsp[(6) - (8)].num);
+ }
+ break;
+
+ case 330:
+
+/* Line 1806 of yacc.c */
+#line 2997 "parse.y"
+ {
+ if (in_def || in_single)
+ yyerror("module definition in method body");
+ local_push(0);
+ /*%%%*/
+ (yyval.num) = ruby_sourceline;
+ /*%
+ %*/
+ }
+ break;
+
+ case 331:
+
+/* Line 1806 of yacc.c */
+#line 3008 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_MODULE((yyvsp[(2) - (5)].node), (yyvsp[(4) - (5)].node));
+ nd_set_line((yyval.node), (yyvsp[(3) - (5)].num));
+ /*%
+ $$ = dispatch2(module, $2, $4);
+ %*/
+ local_pop();
+ }
+ break;
+
+ case 332:
+
+/* Line 1806 of yacc.c */
+#line 3018 "parse.y"
+ {
+ in_def++;
+ local_push(0);
+ (yyval.id) = current_arg;
+ current_arg = 0;
+ }
+ break;
+
+ case 333:
+
+/* Line 1806 of yacc.c */
+#line 3027 "parse.y"
+ {
+ /*%%%*/
+ NODE *body = remove_begin((yyvsp[(5) - (6)].node));
+ reduce_nodes(&body);
+ (yyval.node) = NEW_DEFN((yyvsp[(2) - (6)].id), (yyvsp[(4) - (6)].node), body, NOEX_PRIVATE);
+ nd_set_line((yyval.node), (yyvsp[(1) - (6)].num));
+ /*%
+ $$ = dispatch3(def, $2, $4, $5);
+ %*/
+ local_pop();
+ in_def--;
+ current_arg = (yyvsp[(3) - (6)].id);
+ }
+ break;
+
+ case 334:
+
+/* Line 1806 of yacc.c */
+#line 3040 "parse.y"
+ {lex_state = EXPR_FNAME;}
+ break;
+
+ case 335:
+
+/* Line 1806 of yacc.c */
+#line 3041 "parse.y"
+ {
+ in_single++;
+ lex_state = EXPR_ENDFN; /* force for args */
+ local_push(0);
+ (yyval.id) = current_arg;
+ current_arg = 0;
+ }
+ break;
+
+ case 336:
+
+/* Line 1806 of yacc.c */
+#line 3051 "parse.y"
+ {
+ /*%%%*/
+ NODE *body = remove_begin((yyvsp[(8) - (9)].node));
+ reduce_nodes(&body);
+ (yyval.node) = NEW_DEFS((yyvsp[(2) - (9)].node), (yyvsp[(5) - (9)].id), (yyvsp[(7) - (9)].node), body);
+ nd_set_line((yyval.node), (yyvsp[(1) - (9)].num));
+ /*%
+ $$ = dispatch5(defs, $2, $3, $5, $7, $8);
+ %*/
+ local_pop();
+ in_single--;
+ current_arg = (yyvsp[(6) - (9)].id);
+ }
+ break;
+
+ case 337:
+
+/* Line 1806 of yacc.c */
+#line 3065 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_BREAK(0);
+ /*%
+ $$ = dispatch1(break, arg_new());
+ %*/
+ }
+ break;
+
+ case 338:
+
+/* Line 1806 of yacc.c */
+#line 3073 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_NEXT(0);
+ /*%
+ $$ = dispatch1(next, arg_new());
+ %*/
+ }
+ break;
+
+ case 339:
+
+/* Line 1806 of yacc.c */
+#line 3081 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_REDO();
+ /*%
+ $$ = dispatch0(redo);
+ %*/
+ }
+ break;
+
+ case 340:
+
+/* Line 1806 of yacc.c */
+#line 3089 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_RETRY();
+ /*%
+ $$ = dispatch0(retry);
+ %*/
+ }
+ break;
+
+ case 341:
+
+/* Line 1806 of yacc.c */
+#line 3099 "parse.y"
+ {
+ /*%%%*/
+ value_expr((yyvsp[(1) - (1)].node));
+ (yyval.node) = (yyvsp[(1) - (1)].node);
+ if (!(yyval.node)) (yyval.node) = NEW_NIL();
+ /*%
+ $$ = $1;
+ %*/
+ }
+ break;
+
+ case 342:
+
+/* Line 1806 of yacc.c */
+#line 3111 "parse.y"
+ {
+ token_info_push("begin");
+ }
+ break;
+
+ case 343:
+
+/* Line 1806 of yacc.c */
+#line 3117 "parse.y"
+ {
+ token_info_push("if");
+ }
+ break;
+
+ case 344:
+
+/* Line 1806 of yacc.c */
+#line 3123 "parse.y"
+ {
+ token_info_push("unless");
+ }
+ break;
+
+ case 345:
+
+/* Line 1806 of yacc.c */
+#line 3129 "parse.y"
+ {
+ token_info_push("while");
+ }
+ break;
+
+ case 346:
+
+/* Line 1806 of yacc.c */
+#line 3135 "parse.y"
+ {
+ token_info_push("until");
+ }
+ break;
+
+ case 347:
+
+/* Line 1806 of yacc.c */
+#line 3141 "parse.y"
+ {
+ token_info_push("case");
+ }
+ break;
+
+ case 348:
+
+/* Line 1806 of yacc.c */
+#line 3147 "parse.y"
+ {
+ token_info_push("for");
+ }
+ break;
+
+ case 349:
+
+/* Line 1806 of yacc.c */
+#line 3153 "parse.y"
+ {
+ token_info_push("class");
+ }
+ break;
+
+ case 350:
+
+/* Line 1806 of yacc.c */
+#line 3159 "parse.y"
+ {
+ token_info_push("module");
+ }
+ break;
+
+ case 351:
+
+/* Line 1806 of yacc.c */
+#line 3165 "parse.y"
+ {
+ token_info_push("def");
+ /*%%%*/
+ (yyval.num) = ruby_sourceline;
+ /*%
+ %*/
+ }
+ break;
+
+ case 352:
+
+/* Line 1806 of yacc.c */
+#line 3175 "parse.y"
+ {
+ token_info_pop("end");
+ }
+ break;
+
+ case 359:
+
+/* Line 1806 of yacc.c */
+#line 3205 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_IF(cond((yyvsp[(2) - (5)].node)), (yyvsp[(4) - (5)].node), (yyvsp[(5) - (5)].node));
+ fixpos((yyval.node), (yyvsp[(2) - (5)].node));
+ /*%
+ $$ = dispatch3(elsif, $2, $4, escape_Qundef($5));
+ %*/
+ }
+ break;
+
+ case 361:
+
+/* Line 1806 of yacc.c */
+#line 3217 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = (yyvsp[(2) - (2)].node);
+ /*%
+ $$ = dispatch1(else, $2);
+ %*/
+ }
+ break;
+
+ case 364:
+
+/* Line 1806 of yacc.c */
+#line 3231 "parse.y"
+ {
+ (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
+ /*%%%*/
+ /*%
+ $$ = dispatch1(mlhs_paren, $$);
+ %*/
+ }
+ break;
+
+ case 365:
+
+/* Line 1806 of yacc.c */
+#line 3239 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = (yyvsp[(2) - (3)].node);
+ /*%
+ $$ = dispatch1(mlhs_paren, $2);
+ %*/
+ }
+ break;
+
+ case 366:
+
+/* Line 1806 of yacc.c */
+#line 3249 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
+ /*%
+ $$ = mlhs_add(mlhs_new(), $1);
+ %*/
+ }
+ break;
+
+ case 367:
+
+/* Line 1806 of yacc.c */
+#line 3257 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
+ /*%
+ $$ = mlhs_add($1, $3);
+ %*/
+ }
+ break;
+
+ case 368:
+
+/* Line 1806 of yacc.c */
+#line 3267 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_MASGN((yyvsp[(1) - (1)].node), 0);
+ /*%
+ $$ = $1;
+ %*/
+ }
+ break;
+
+ case 369:
+
+/* Line 1806 of yacc.c */
+#line 3275 "parse.y"
+ {
+ (yyval.node) = assignable((yyvsp[(4) - (4)].id), 0);
+ /*%%%*/
+ (yyval.node) = NEW_MASGN((yyvsp[(1) - (4)].node), (yyval.node));
+ /*%
+ $$ = mlhs_add_star($1, $$);
+ %*/
+ }
+ break;
+
+ case 370:
+
+/* Line 1806 of yacc.c */
+#line 3284 "parse.y"
+ {
+ (yyval.node) = assignable((yyvsp[(4) - (6)].id), 0);
+ /*%%%*/
+ (yyval.node) = NEW_MASGN((yyvsp[(1) - (6)].node), NEW_POSTARG((yyval.node), (yyvsp[(6) - (6)].node)));
+ /*%
+ $$ = mlhs_add_star($1, $$);
+ %*/
+ }
+ break;
+
+ case 371:
+
+/* Line 1806 of yacc.c */
+#line 3293 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_MASGN((yyvsp[(1) - (3)].node), -1);
+ /*%
+ $$ = mlhs_add_star($1, Qnil);
+ %*/
+ }
+ break;
+
+ case 372:
+
+/* Line 1806 of yacc.c */
+#line 3301 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_MASGN((yyvsp[(1) - (5)].node), NEW_POSTARG(-1, (yyvsp[(5) - (5)].node)));
+ /*%
+ $$ = mlhs_add_star($1, $5);
+ %*/
+ }
+ break;
+
+ case 373:
+
+/* Line 1806 of yacc.c */
+#line 3309 "parse.y"
+ {
+ (yyval.node) = assignable((yyvsp[(2) - (2)].id), 0);
+ /*%%%*/
+ (yyval.node) = NEW_MASGN(0, (yyval.node));
+ /*%
+ $$ = mlhs_add_star(mlhs_new(), $$);
+ %*/
+ }
+ break;
+
+ case 374:
+
+/* Line 1806 of yacc.c */
+#line 3318 "parse.y"
+ {
+ (yyval.node) = assignable((yyvsp[(2) - (4)].id), 0);
+ /*%%%*/
+ (yyval.node) = NEW_MASGN(0, NEW_POSTARG((yyval.node), (yyvsp[(4) - (4)].node)));
+ /*%
+ #if 0
+ TODO: Check me
+ #endif
+ $$ = mlhs_add_star($$, $4);
+ %*/
+ }
+ break;
+
+ case 375:
+
+/* Line 1806 of yacc.c */
+#line 3330 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_MASGN(0, -1);
+ /*%
+ $$ = mlhs_add_star(mlhs_new(), Qnil);
+ %*/
+ }
+ break;
+
+ case 376:
+
+/* Line 1806 of yacc.c */
+#line 3338 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_MASGN(0, NEW_POSTARG(-1, (yyvsp[(3) - (3)].node)));
+ /*%
+ $$ = mlhs_add_star(mlhs_new(), Qnil);
+ %*/
+ }
+ break;
+
+ case 377:
+
+/* Line 1806 of yacc.c */
+#line 3349 "parse.y"
+ {
+ (yyval.node) = new_args_tail((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].id));
+ }
+ break;
+
+ case 378:
+
+/* Line 1806 of yacc.c */
+#line 3353 "parse.y"
+ {
+ (yyval.node) = new_args_tail((yyvsp[(1) - (2)].node), Qnone, (yyvsp[(2) - (2)].id));
+ }
+ break;
+
+ case 379:
+
+/* Line 1806 of yacc.c */
+#line 3357 "parse.y"
+ {
+ (yyval.node) = new_args_tail(Qnone, (yyvsp[(1) - (2)].id), (yyvsp[(2) - (2)].id));
+ }
+ break;
+
+ case 380:
+
+/* Line 1806 of yacc.c */
+#line 3361 "parse.y"
+ {
+ (yyval.node) = new_args_tail(Qnone, Qnone, (yyvsp[(1) - (1)].id));
+ }
+ break;
+
+ case 381:
+
+/* Line 1806 of yacc.c */
+#line 3367 "parse.y"
+ {
+ (yyval.node) = (yyvsp[(2) - (2)].node);
+ }
+ break;
+
+ case 382:
+
+/* Line 1806 of yacc.c */
+#line 3371 "parse.y"
+ {
+ (yyval.node) = new_args_tail(Qnone, Qnone, Qnone);
+ }
+ break;
+
+ case 383:
+
+/* Line 1806 of yacc.c */
+#line 3377 "parse.y"
+ {
+ (yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), (yyvsp[(5) - (6)].id), Qnone, (yyvsp[(6) - (6)].node));
+ }
+ break;
+
+ case 384:
+
+/* Line 1806 of yacc.c */
+#line 3381 "parse.y"
+ {
+ (yyval.node) = new_args((yyvsp[(1) - (8)].node), (yyvsp[(3) - (8)].node), (yyvsp[(5) - (8)].id), (yyvsp[(7) - (8)].node), (yyvsp[(8) - (8)].node));
+ }
+ break;
+
+ case 385:
+
+/* Line 1806 of yacc.c */
+#line 3385 "parse.y"
+ {
+ (yyval.node) = new_args((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node), Qnone, Qnone, (yyvsp[(4) - (4)].node));
+ }
+ break;
+
+ case 386:
+
+/* Line 1806 of yacc.c */
+#line 3389 "parse.y"
+ {
+ (yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), Qnone, (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].node));
+ }
+ break;
+
+ case 387:
+
+/* Line 1806 of yacc.c */
+#line 3393 "parse.y"
+ {
+ (yyval.node) = new_args((yyvsp[(1) - (4)].node), Qnone, (yyvsp[(3) - (4)].id), Qnone, (yyvsp[(4) - (4)].node));
+ }
+ break;
+
+ case 388:
+
+/* Line 1806 of yacc.c */
+#line 3397 "parse.y"
+ {
+ (yyval.node) = new_args((yyvsp[(1) - (2)].node), Qnone, 1, Qnone, new_args_tail(Qnone, Qnone, Qnone));
+ /*%%%*/
+ /*%
+ dispatch1(excessed_comma, $$);
+ %*/
+ }
+ break;
+
+ case 389:
+
+/* Line 1806 of yacc.c */
+#line 3405 "parse.y"
+ {
+ (yyval.node) = new_args((yyvsp[(1) - (6)].node), Qnone, (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].node));
+ }
+ break;
+
+ case 390:
+
+/* Line 1806 of yacc.c */
+#line 3409 "parse.y"
+ {
+ (yyval.node) = new_args((yyvsp[(1) - (2)].node), Qnone, Qnone, Qnone, (yyvsp[(2) - (2)].node));
+ }
+ break;
+
+ case 391:
+
+/* Line 1806 of yacc.c */
+#line 3413 "parse.y"
+ {
+ (yyval.node) = new_args(Qnone, (yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), Qnone, (yyvsp[(4) - (4)].node));
+ }
+ break;
+
+ case 392:
+
+/* Line 1806 of yacc.c */
+#line 3417 "parse.y"
+ {
+ (yyval.node) = new_args(Qnone, (yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].node));
+ }
+ break;
+
+ case 393:
+
+/* Line 1806 of yacc.c */
+#line 3421 "parse.y"
+ {
+ (yyval.node) = new_args(Qnone, (yyvsp[(1) - (2)].node), Qnone, Qnone, (yyvsp[(2) - (2)].node));
+ }
+ break;
+
+ case 394:
+
+/* Line 1806 of yacc.c */
+#line 3425 "parse.y"
+ {
+ (yyval.node) = new_args(Qnone, (yyvsp[(1) - (4)].node), Qnone, (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].node));
+ }
+ break;
+
+ case 395:
+
+/* Line 1806 of yacc.c */
+#line 3429 "parse.y"
+ {
+ (yyval.node) = new_args(Qnone, Qnone, (yyvsp[(1) - (2)].id), Qnone, (yyvsp[(2) - (2)].node));
+ }
+ break;
+
+ case 396:
+
+/* Line 1806 of yacc.c */
+#line 3433 "parse.y"
+ {
+ (yyval.node) = new_args(Qnone, Qnone, (yyvsp[(1) - (4)].id), (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].node));
+ }
+ break;
+
+ case 397:
+
+/* Line 1806 of yacc.c */
+#line 3437 "parse.y"
+ {
+ (yyval.node) = new_args(Qnone, Qnone, Qnone, Qnone, (yyvsp[(1) - (1)].node));
+ }
+ break;
+
+ case 399:
+
+/* Line 1806 of yacc.c */
+#line 3444 "parse.y"
+ {
+ command_start = TRUE;
+ }
+ break;
+
+ case 400:
+
+/* Line 1806 of yacc.c */
+#line 3450 "parse.y"
+ {
+ current_arg = 0;
+ /*%%%*/
+ (yyval.node) = 0;
+ /*%
+ $$ = blockvar_new(params_new(Qnil,Qnil,Qnil,Qnil,Qnil,Qnil,Qnil),
+ escape_Qundef($2));
+ %*/
+ }
+ break;
+
+ case 401:
+
+/* Line 1806 of yacc.c */
+#line 3460 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = 0;
+ /*%
+ $$ = blockvar_new(params_new(Qnil,Qnil,Qnil,Qnil,Qnil,Qnil,Qnil),
+ Qnil);
+ %*/
+ }
+ break;
+
+ case 402:
+
+/* Line 1806 of yacc.c */
+#line 3469 "parse.y"
+ {
+ current_arg = 0;
+ /*%%%*/
+ (yyval.node) = (yyvsp[(2) - (4)].node);
+ /*%
+ $$ = blockvar_new(escape_Qundef($2), escape_Qundef($3));
+ %*/
+ }
+ break;
+
+ case 403:
+
+/* Line 1806 of yacc.c */
+#line 3481 "parse.y"
+ {
+ (yyval.node) = 0;
+ }
+ break;
+
+ case 404:
+
+/* Line 1806 of yacc.c */
+#line 3485 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = 0;
+ /*%
+ $$ = $3;
+ %*/
+ }
+ break;
+
+ case 407:
+
+/* Line 1806 of yacc.c */
+#line 3511 "parse.y"
+ {
+ new_bv(get_id((yyvsp[(1) - (1)].id)));
+ /*%%%*/
+ /*%
+ $$ = get_value($1);
+ %*/
+ }
+ break;
+
+ case 408:
+
+/* Line 1806 of yacc.c */
+#line 3519 "parse.y"
+ {
+ (yyval.node) = 0;
+ }
+ break;
+
+ case 409:
+
+/* Line 1806 of yacc.c */
+#line 3524 "parse.y"
+ {
+ (yyval.vars) = dyna_push();
+ }
+ break;
+
+ case 410:
+
+/* Line 1806 of yacc.c */
+#line 3527 "parse.y"
+ {
+ (yyval.num) = lpar_beg;
+ lpar_beg = ++paren_nest;
+ }
+ break;
+
+ case 411:
+
+/* Line 1806 of yacc.c */
+#line 3532 "parse.y"
+ {
+ (yyval.num) = ruby_sourceline;
+ }
+ break;
+
+ case 412:
+
+/* Line 1806 of yacc.c */
+#line 3535 "parse.y"
+ {
+ (yyval.val) = cmdarg_stack;
+ cmdarg_stack = 0;
+ }
+ break;
+
+ case 413:
+
+/* Line 1806 of yacc.c */
+#line 3540 "parse.y"
+ {
+ lpar_beg = (yyvsp[(2) - (6)].num);
+ cmdarg_stack = (yyvsp[(5) - (6)].val);
+ CMDARG_LEXPOP();
+ /*%%%*/
+ (yyval.node) = NEW_LAMBDA((yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node));
+ nd_set_line((yyval.node), (yyvsp[(4) - (6)].num));
+ /*%
+ $$ = dispatch2(lambda, $3, $6);
+ %*/
+ dyna_pop((yyvsp[(1) - (6)].vars));
+ }
+ break;
+
+ case 414:
+
+/* Line 1806 of yacc.c */
+#line 3555 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = (yyvsp[(2) - (4)].node);
+ /*%
+ $$ = dispatch1(paren, $2);
+ %*/
+ }
+ break;
+
+ case 415:
+
+/* Line 1806 of yacc.c */
+#line 3563 "parse.y"
+ {
+ (yyval.node) = (yyvsp[(1) - (1)].node);
+ }
+ break;
+
+ case 416:
+
+/* Line 1806 of yacc.c */
+#line 3569 "parse.y"
+ {
+ (yyval.node) = (yyvsp[(2) - (3)].node);
+ }
+ break;
+
+ case 417:
+
+/* Line 1806 of yacc.c */
+#line 3573 "parse.y"
+ {
+ (yyval.node) = (yyvsp[(2) - (3)].node);
+ }
+ break;
+
+ case 418:
+
+/* Line 1806 of yacc.c */
+#line 3579 "parse.y"
+ {
+ (yyvsp[(1) - (1)].vars) = dyna_push();
+ /*%%%*/
+ (yyval.num) = ruby_sourceline;
+ /*% %*/
+ }
+ break;
+
+ case 419:
+
+/* Line 1806 of yacc.c */
+#line 3588 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node));
+ nd_set_line((yyval.node), (yyvsp[(2) - (5)].num));
+ /*%
+ $$ = dispatch2(do_block, escape_Qundef($3), $4);
+ %*/
+ dyna_pop((yyvsp[(1) - (5)].vars));
+ }
+ break;
+
+ case 420:
+
+/* Line 1806 of yacc.c */
+#line 3600 "parse.y"
+ {
+ /*%%%*/
+ if (nd_type((yyvsp[(1) - (2)].node)) == NODE_YIELD) {
+ compile_error(PARSER_ARG "block given to yield");
+ }
+ else {
+ block_dup_check((yyvsp[(1) - (2)].node)->nd_args, (yyvsp[(2) - (2)].node));
+ }
+ (yyvsp[(2) - (2)].node)->nd_iter = (yyvsp[(1) - (2)].node);
+ (yyval.node) = (yyvsp[(2) - (2)].node);
+ fixpos((yyval.node), (yyvsp[(1) - (2)].node));
+ /*%
+ $$ = method_add_block($1, $2);
+ %*/
+ }
+ break;
+
+ case 421:
+
+/* Line 1806 of yacc.c */
+#line 3616 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
+ /*%
+ $$ = dispatch3(call, $1, $2, $3);
+ $$ = method_optarg($$, $4);
+ %*/
+ }
+ break;
+
+ case 422:
+
+/* Line 1806 of yacc.c */
+#line 3625 "parse.y"
+ {
+ /*%%%*/
+ block_dup_check((yyvsp[(4) - (5)].node), (yyvsp[(5) - (5)].node));
+ (yyvsp[(5) - (5)].node)->nd_iter = NEW_CALL((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].node));
+ (yyval.node) = (yyvsp[(5) - (5)].node);
+ fixpos((yyval.node), (yyvsp[(1) - (5)].node));
+ /*%
+ $$ = dispatch4(command_call, $1, $2, $3, $4);
+ $$ = method_add_block($$, $5);
+ %*/
+ }
+ break;
+
+ case 423:
+
+/* Line 1806 of yacc.c */
+#line 3637 "parse.y"
+ {
+ /*%%%*/
+ block_dup_check((yyvsp[(4) - (5)].node), (yyvsp[(5) - (5)].node));
+ (yyvsp[(5) - (5)].node)->nd_iter = NEW_CALL((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].node));
+ (yyval.node) = (yyvsp[(5) - (5)].node);
+ fixpos((yyval.node), (yyvsp[(1) - (5)].node));
+ /*%
+ $$ = dispatch4(command_call, $1, $2, $3, $4);
+ $$ = method_add_block($$, $5);
+ %*/
+ }
+ break;
+
+ case 424:
+
+/* Line 1806 of yacc.c */
+#line 3651 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = (yyvsp[(1) - (2)].node);
+ (yyval.node)->nd_args = (yyvsp[(2) - (2)].node);
+ /*%
+ $$ = method_arg(dispatch1(fcall, $1), $2);
+ %*/
+ }
+ break;
+
+ case 425:
+
+/* Line 1806 of yacc.c */
+#line 3660 "parse.y"
+ {
+ /*%%%*/
+ (yyval.num) = ruby_sourceline;
+ /*% %*/
+ }
+ break;
+
+ case 426:
+
+/* Line 1806 of yacc.c */
+#line 3666 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_CALL((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(5) - (5)].node));
+ nd_set_line((yyval.node), (yyvsp[(4) - (5)].num));
+ /*%
+ $$ = dispatch3(call, $1, ripper_id2sym('.'), $3);
+ $$ = method_optarg($$, $5);
+ %*/
+ }
+ break;
+
+ case 427:
+
+/* Line 1806 of yacc.c */
+#line 3676 "parse.y"
+ {
+ /*%%%*/
+ (yyval.num) = ruby_sourceline;
+ /*% %*/
+ }
+ break;
+
+ case 428:
+
+/* Line 1806 of yacc.c */
+#line 3682 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_CALL((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(5) - (5)].node));
+ nd_set_line((yyval.node), (yyvsp[(4) - (5)].num));
+ /*%
+ $$ = dispatch3(call, $1, ripper_id2sym('.'), $3);
+ $$ = method_optarg($$, $5);
+ %*/
+ }
+ break;
+
+ case 429:
+
+/* Line 1806 of yacc.c */
+#line 3692 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_CALL((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id), 0);
+ /*%
+ $$ = dispatch3(call, $1, ID2SYM(idCOLON2), $3);
+ %*/
+ }
+ break;
+
+ case 430:
+
+/* Line 1806 of yacc.c */
+#line 3700 "parse.y"
+ {
+ /*%%%*/
+ (yyval.num) = ruby_sourceline;
+ /*% %*/
+ }
+ break;
+
+ case 431:
+
+/* Line 1806 of yacc.c */
+#line 3706 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), idCall, (yyvsp[(4) - (4)].node));
+ nd_set_line((yyval.node), (yyvsp[(3) - (4)].num));
+ /*%
+ $$ = dispatch3(call, $1, ripper_id2sym('.'),
+ ID2SYM(idCall));
+ $$ = method_optarg($$, $4);
+ %*/
+ }
+ break;
+
+ case 432:
+
+/* Line 1806 of yacc.c */
+#line 3717 "parse.y"
+ {
+ /*%%%*/
+ (yyval.num) = ruby_sourceline;
+ /*% %*/
+ }
+ break;
+
+ case 433:
+
+/* Line 1806 of yacc.c */
+#line 3723 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), idCall, (yyvsp[(4) - (4)].node));
+ nd_set_line((yyval.node), (yyvsp[(3) - (4)].num));
+ /*%
+ $$ = dispatch3(call, $1, ID2SYM(idCOLON2),
+ ID2SYM(idCall));
+ $$ = method_optarg($$, $4);
+ %*/
+ }
+ break;
+
+ case 434:
+
+/* Line 1806 of yacc.c */
+#line 3734 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_SUPER((yyvsp[(2) - (2)].node));
+ /*%
+ $$ = dispatch1(super, $2);
+ %*/
+ }
+ break;
+
+ case 435:
+
+/* Line 1806 of yacc.c */
+#line 3742 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_ZSUPER();
+ /*%
+ $$ = dispatch0(zsuper);
+ %*/
+ }
+ break;
+
+ case 436:
+
+/* Line 1806 of yacc.c */
+#line 3750 "parse.y"
+ {
+ /*%%%*/
+ if ((yyvsp[(1) - (4)].node) && nd_type((yyvsp[(1) - (4)].node)) == NODE_SELF)
+ (yyval.node) = NEW_FCALL(tAREF, (yyvsp[(3) - (4)].node));
+ else
+ (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), tAREF, (yyvsp[(3) - (4)].node));
+ fixpos((yyval.node), (yyvsp[(1) - (4)].node));
+ /*%
+ $$ = dispatch2(aref, $1, escape_Qundef($3));
+ %*/
+ }
+ break;
+
+ case 437:
+
+/* Line 1806 of yacc.c */
+#line 3764 "parse.y"
+ {
+ (yyvsp[(1) - (1)].vars) = dyna_push();
+ /*%%%*/
+ (yyval.num) = ruby_sourceline;
+ /*%
+ %*/
+ }
+ break;
+
+ case 438:
+
+/* Line 1806 of yacc.c */
+#line 3773 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node));
+ nd_set_line((yyval.node), (yyvsp[(2) - (5)].num));
+ /*%
+ $$ = dispatch2(brace_block, escape_Qundef($3), $4);
+ %*/
+ dyna_pop((yyvsp[(1) - (5)].vars));
+ }
+ break;
+
+ case 439:
+
+/* Line 1806 of yacc.c */
+#line 3783 "parse.y"
+ {
+ (yyvsp[(1) - (1)].vars) = dyna_push();
+ /*%%%*/
+ (yyval.num) = ruby_sourceline;
+ /*%
+ %*/
+ }
+ break;
+
+ case 440:
+
+/* Line 1806 of yacc.c */
+#line 3792 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node));
+ nd_set_line((yyval.node), (yyvsp[(2) - (5)].num));
+ /*%
+ $$ = dispatch2(do_block, escape_Qundef($3), $4);
+ %*/
+ dyna_pop((yyvsp[(1) - (5)].vars));
+ }
+ break;
+
+ case 441:
+
+/* Line 1806 of yacc.c */
+#line 3806 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_WHEN((yyvsp[(2) - (5)].node), (yyvsp[(4) - (5)].node), (yyvsp[(5) - (5)].node));
+ /*%
+ $$ = dispatch3(when, $2, $4, escape_Qundef($5));
+ %*/
+ }
+ break;
+
+ case 444:
+
+/* Line 1806 of yacc.c */
+#line 3822 "parse.y"
+ {
+ /*%%%*/
+ if ((yyvsp[(3) - (6)].node)) {
+ (yyvsp[(3) - (6)].node) = node_assign((yyvsp[(3) - (6)].node), NEW_ERRINFO());
+ (yyvsp[(5) - (6)].node) = block_append((yyvsp[(3) - (6)].node), (yyvsp[(5) - (6)].node));
+ }
+ (yyval.node) = NEW_RESBODY((yyvsp[(2) - (6)].node), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].node));
+ fixpos((yyval.node), (yyvsp[(2) - (6)].node)?(yyvsp[(2) - (6)].node):(yyvsp[(5) - (6)].node));
+ /*%
+ $$ = dispatch4(rescue,
+ escape_Qundef($2),
+ escape_Qundef($3),
+ escape_Qundef($5),
+ escape_Qundef($6));
+ %*/
+ }
+ break;
+
+ case 446:
+
+/* Line 1806 of yacc.c */
+#line 3842 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
+ /*%
+ $$ = rb_ary_new3(1, $1);
+ %*/
+ }
+ break;
+
+ case 447:
+
+/* Line 1806 of yacc.c */
+#line 3850 "parse.y"
+ {
+ /*%%%*/
+ if (!((yyval.node) = splat_array((yyvsp[(1) - (1)].node)))) (yyval.node) = (yyvsp[(1) - (1)].node);
+ /*%
+ $$ = $1;
+ %*/
+ }
+ break;
+
+ case 449:
+
+/* Line 1806 of yacc.c */
+#line 3861 "parse.y"
+ {
+ (yyval.node) = (yyvsp[(2) - (2)].node);
+ }
+ break;
+
+ case 451:
+
+/* Line 1806 of yacc.c */
+#line 3868 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = (yyvsp[(2) - (2)].node);
+ /*%
+ $$ = dispatch1(ensure, $2);
+ %*/
+ }
+ break;
+
+ case 454:
+
+/* Line 1806 of yacc.c */
+#line 3880 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_LIT(ID2SYM((yyvsp[(1) - (1)].id)));
+ /*%
+ $$ = dispatch1(symbol_literal, $1);
+ %*/
+ }
+ break;
+
+ case 456:
+
+/* Line 1806 of yacc.c */
+#line 3891 "parse.y"
+ {
+ /*%%%*/
+ NODE *node = (yyvsp[(1) - (1)].node);
+ if (!node) {
+ node = NEW_STR(STR_NEW0());
+ }
+ else {
+ node = evstr2dstr(node);
+ }
+ (yyval.node) = node;
+ /*%
+ $$ = $1;
+ %*/
+ }
+ break;
+
+ case 459:
+
+/* Line 1806 of yacc.c */
+#line 3910 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
+ /*%
+ $$ = dispatch2(string_concat, $1, $2);
+ %*/
+ }
+ break;
+
+ case 460:
+
+/* Line 1806 of yacc.c */
+#line 3920 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = (yyvsp[(2) - (3)].node);
+ /*%
+ $$ = dispatch1(string_literal, $2);
+ %*/
+ }
+ break;
+
+ case 461:
+
+/* Line 1806 of yacc.c */
+#line 3930 "parse.y"
+ {
+ /*%%%*/
+ NODE *node = (yyvsp[(2) - (3)].node);
+ if (!node) {
+ node = NEW_XSTR(STR_NEW0());
+ }
+ else {
+ switch (nd_type(node)) {
+ case NODE_STR:
+ nd_set_type(node, NODE_XSTR);
+ break;
+ case NODE_DSTR:
+ nd_set_type(node, NODE_DXSTR);
+ break;
+ default:
+ node = NEW_NODE(NODE_DXSTR, Qnil, 1, NEW_LIST(node));
+ break;
+ }
+ }
+ (yyval.node) = node;
+ /*%
+ $$ = dispatch1(xstring_literal, $2);
+ %*/
+ }
+ break;
+
+ case 462:
+
+/* Line 1806 of yacc.c */
+#line 3957 "parse.y"
+ {
+ /*%%%*/
+ int options = (yyvsp[(3) - (3)].num);
+ NODE *node = (yyvsp[(2) - (3)].node);
+ NODE *list, *prev;
+ if (!node) {
+ node = NEW_LIT(reg_compile(STR_NEW0(), options));
+ }
+ else switch (nd_type(node)) {
+ case NODE_STR:
+ {
+ VALUE src = node->nd_lit;
+ nd_set_type(node, NODE_LIT);
+ node->nd_lit = reg_compile(src, options);
+ }
+ break;
+ default:
+ node = NEW_NODE(NODE_DSTR, STR_NEW0(), 1, NEW_LIST(node));
+ case NODE_DSTR:
+ if (options & RE_OPTION_ONCE) {
+ nd_set_type(node, NODE_DREGX_ONCE);
+ }
+ else {
+ nd_set_type(node, NODE_DREGX);
+ }
+ node->nd_cflag = options & RE_OPTION_MASK;
+ if (!NIL_P(node->nd_lit)) reg_fragment_check(node->nd_lit, options);
+ for (list = (prev = node)->nd_next; list; list = list->nd_next) {
+ if (nd_type(list->nd_head) == NODE_STR) {
+ VALUE tail = list->nd_head->nd_lit;
+ if (reg_fragment_check(tail, options) && prev && !NIL_P(prev->nd_lit)) {
+ VALUE lit = prev == node ? prev->nd_lit : prev->nd_head->nd_lit;
+ if (!literal_concat0(parser, lit, tail)) {
+ node = 0;
+ break;
+ }
+ rb_str_resize(tail, 0);
+ prev->nd_next = list->nd_next;
+ rb_gc_force_recycle((VALUE)list->nd_head);
+ rb_gc_force_recycle((VALUE)list);
+ list = prev;
+ }
+ else {
+ prev = list;
+ }
+ }
+ else {
+ prev = 0;
+ }
+ }
+ if (!node->nd_next) {
+ VALUE src = node->nd_lit;
+ nd_set_type(node, NODE_LIT);
+ node->nd_lit = reg_compile(src, options);
+ }
+ break;
+ }
+ (yyval.node) = node;
+ /*%
+ VALUE re = $2, opt = $3, src = 0, err;
+ int options = 0;
+ if (ripper_is_node_yylval(re)) {
+ $2 = RNODE(re)->nd_rval;
+ src = RNODE(re)->nd_cval;
+ }
+ if (ripper_is_node_yylval(opt)) {
+ $3 = RNODE(opt)->nd_rval;
+ options = (int)RNODE(opt)->nd_state;
+ }
+ if (src && NIL_P(rb_parser_reg_compile(parser, src, options, &err))) {
+ compile_error(PARSER_ARG "%"PRIsVALUE, err);
+ }
+ $$ = dispatch2(regexp_literal, $2, $3);
+ %*/
+ }
+ break;
+
+ case 463:
+
+/* Line 1806 of yacc.c */
+#line 4035 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_ZARRAY();
+ /*%
+ $$ = dispatch0(words_new);
+ $$ = dispatch1(array, $$);
+ %*/
+ }
+ break;
+
+ case 464:
+
+/* Line 1806 of yacc.c */
+#line 4044 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = (yyvsp[(2) - (3)].node);
+ /*%
+ $$ = dispatch1(array, $2);
+ %*/
+ }
+ break;
+
+ case 465:
+
+/* Line 1806 of yacc.c */
+#line 4054 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = 0;
+ /*%
+ $$ = dispatch0(words_new);
+ %*/
+ }
+ break;
+
+ case 466:
+
+/* Line 1806 of yacc.c */
+#line 4062 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = list_append((yyvsp[(1) - (3)].node), evstr2dstr((yyvsp[(2) - (3)].node)));
+ /*%
+ $$ = dispatch2(words_add, $1, $2);
+ %*/
+ }
+ break;
+
+ case 468:
+
+/* Line 1806 of yacc.c */
+#line 4080 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
+ /*%
+ $$ = dispatch2(word_add, $1, $2);
+ %*/
+ }
+ break;
+
+ case 469:
+
+/* Line 1806 of yacc.c */
+#line 4090 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_ZARRAY();
+ /*%
+ $$ = dispatch0(symbols_new);
+ $$ = dispatch1(array, $$);
+ %*/
+ }
+ break;
+
+ case 470:
+
+/* Line 1806 of yacc.c */
+#line 4099 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = (yyvsp[(2) - (3)].node);
+ /*%
+ $$ = dispatch1(array, $2);
+ %*/
+ }
+ break;
+
+ case 471:
+
+/* Line 1806 of yacc.c */
+#line 4109 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = 0;
+ /*%
+ $$ = dispatch0(symbols_new);
+ %*/
+ }
+ break;
+
+ case 472:
+
+/* Line 1806 of yacc.c */
+#line 4117 "parse.y"
+ {
+ /*%%%*/
+ (yyvsp[(2) - (3)].node) = evstr2dstr((yyvsp[(2) - (3)].node));
+ if (nd_type((yyvsp[(2) - (3)].node)) == NODE_DSTR) {
+ nd_set_type((yyvsp[(2) - (3)].node), NODE_DSYM);
+ }
+ else {
+ nd_set_type((yyvsp[(2) - (3)].node), NODE_LIT);
+ (yyvsp[(2) - (3)].node)->nd_lit = rb_str_intern((yyvsp[(2) - (3)].node)->nd_lit);
+ }
+ (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].node));
+ /*%
+ $$ = dispatch2(symbols_add, $1, $2);
+ %*/
+ }
+ break;
+
+ case 473:
+
+/* Line 1806 of yacc.c */
+#line 4135 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_ZARRAY();
+ /*%
+ $$ = dispatch0(qwords_new);
+ $$ = dispatch1(array, $$);
+ %*/
+ }
+ break;
+
+ case 474:
+
+/* Line 1806 of yacc.c */
+#line 4144 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = (yyvsp[(2) - (3)].node);
+ /*%
+ $$ = dispatch1(array, $2);
+ %*/
+ }
+ break;
+
+ case 475:
+
+/* Line 1806 of yacc.c */
+#line 4154 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_ZARRAY();
+ /*%
+ $$ = dispatch0(qsymbols_new);
+ $$ = dispatch1(array, $$);
+ %*/
+ }
+ break;
+
+ case 476:
+
+/* Line 1806 of yacc.c */
+#line 4163 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = (yyvsp[(2) - (3)].node);
+ /*%
+ $$ = dispatch1(array, $2);
+ %*/
+ }
+ break;
+
+ case 477:
+
+/* Line 1806 of yacc.c */
+#line 4173 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = 0;
+ /*%
+ $$ = dispatch0(qwords_new);
+ %*/
+ }
+ break;
+
+ case 478:
+
+/* Line 1806 of yacc.c */
+#line 4181 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].node));
+ /*%
+ $$ = dispatch2(qwords_add, $1, $2);
+ %*/
+ }
+ break;
+
+ case 479:
+
+/* Line 1806 of yacc.c */
+#line 4191 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = 0;
+ /*%
+ $$ = dispatch0(qsymbols_new);
+ %*/
+ }
+ break;
+
+ case 480:
+
+/* Line 1806 of yacc.c */
+#line 4199 "parse.y"
+ {
+ /*%%%*/
+ VALUE lit;
+ lit = (yyvsp[(2) - (3)].node)->nd_lit;
+ (yyvsp[(2) - (3)].node)->nd_lit = ID2SYM(rb_intern_str(lit));
+ nd_set_type((yyvsp[(2) - (3)].node), NODE_LIT);
+ (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].node));
+ /*%
+ $$ = dispatch2(qsymbols_add, $1, $2);
+ %*/
+ }
+ break;
+
+ case 481:
+
+/* Line 1806 of yacc.c */
+#line 4213 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = 0;
+ /*%
+ $$ = dispatch0(string_content);
+ %*/
+ }
+ break;
+
+ case 482:
+
+/* Line 1806 of yacc.c */
+#line 4221 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
+ /*%
+ $$ = dispatch2(string_add, $1, $2);
+ %*/
+ }
+ break;
+
+ case 483:
+
+/* Line 1806 of yacc.c */
+#line 4231 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = 0;
+ /*%
+ $$ = dispatch0(xstring_new);
+ %*/
+ }
+ break;
+
+ case 484:
+
+/* Line 1806 of yacc.c */
+#line 4239 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
+ /*%
+ $$ = dispatch2(xstring_add, $1, $2);
+ %*/
+ }
+ break;
+
+ case 485:
+
+/* Line 1806 of yacc.c */
+#line 4249 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = 0;
+ /*%
+ $$ = ripper_new_yylval(0, dispatch0(regexp_new), 0);
+ %*/
+ }
+ break;
+
+ case 486:
+
+/* Line 1806 of yacc.c */
+#line 4257 "parse.y"
+ {
+ /*%%%*/
+ NODE *head = (yyvsp[(1) - (2)].node), *tail = (yyvsp[(2) - (2)].node);
+ if (!head) {
+ (yyval.node) = tail;
+ }
+ else if (!tail) {
+ (yyval.node) = head;
+ }
+ else {
+ switch (nd_type(head)) {
+ case NODE_STR:
+ nd_set_type(head, NODE_DSTR);
+ break;
+ case NODE_DSTR:
+ break;
+ default:
+ head = list_append(NEW_DSTR(Qnil), head);
+ break;
+ }
+ (yyval.node) = list_append(head, tail);
+ }
+ /*%
+ VALUE s1 = 1, s2 = 0, n1 = $1, n2 = $2;
+ if (ripper_is_node_yylval(n1)) {
+ s1 = RNODE(n1)->nd_cval;
+ n1 = RNODE(n1)->nd_rval;
+ }
+ if (ripper_is_node_yylval(n2)) {
+ s2 = RNODE(n2)->nd_cval;
+ n2 = RNODE(n2)->nd_rval;
+ }
+ $$ = dispatch2(regexp_add, n1, n2);
+ if (!s1 && s2) {
+ $$ = ripper_new_yylval(0, $$, s2);
+ }
+ %*/
+ }
+ break;
+
+ case 488:
+
+/* Line 1806 of yacc.c */
+#line 4299 "parse.y"
+ {
+ (yyval.node) = lex_strterm;
+ lex_strterm = 0;
+ lex_state = EXPR_BEG;
+ }
+ break;
+
+ case 489:
+
+/* Line 1806 of yacc.c */
+#line 4305 "parse.y"
+ {
+ lex_strterm = (yyvsp[(2) - (3)].node);
+ /*%%%*/
+ (yyval.node) = NEW_EVSTR((yyvsp[(3) - (3)].node));
+ /*%
+ $$ = dispatch1(string_dvar, $3);
+ %*/
+ }
+ break;
+
+ case 490:
+
+/* Line 1806 of yacc.c */
+#line 4314 "parse.y"
+ {
+ (yyvsp[(1) - (1)].val) = cond_stack;
+ (yyval.val) = cmdarg_stack;
+ cond_stack = 0;
+ cmdarg_stack = 0;
+ }
+ break;
+
+ case 491:
+
+/* Line 1806 of yacc.c */
+#line 4320 "parse.y"
+ {
+ (yyval.node) = lex_strterm;
+ lex_strterm = 0;
+ }
+ break;
+
+ case 492:
+
+/* Line 1806 of yacc.c */
+#line 4324 "parse.y"
+ {
+ (yyval.num) = lex_state;
+ lex_state = EXPR_BEG;
+ }
+ break;
+
+ case 493:
+
+/* Line 1806 of yacc.c */
+#line 4328 "parse.y"
+ {
+ (yyval.num) = brace_nest;
+ brace_nest = 0;
+ }
+ break;
+
+ case 494:
+
+/* Line 1806 of yacc.c */
+#line 4333 "parse.y"
+ {
+ cond_stack = (yyvsp[(1) - (7)].val);
+ cmdarg_stack = (yyvsp[(2) - (7)].val);
+ lex_strterm = (yyvsp[(3) - (7)].node);
+ lex_state = (yyvsp[(4) - (7)].num);
+ brace_nest = (yyvsp[(5) - (7)].num);
+ /*%%%*/
+ if ((yyvsp[(6) - (7)].node)) (yyvsp[(6) - (7)].node)->flags &= ~NODE_FL_NEWLINE;
+ (yyval.node) = new_evstr((yyvsp[(6) - (7)].node));
+ /*%
+ $$ = dispatch1(string_embexpr, $6);
+ %*/
+ }
+ break;
+
+ case 495:
+
+/* Line 1806 of yacc.c */
+#line 4349 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_GVAR((yyvsp[(1) - (1)].id));
+ /*%
+ $$ = dispatch1(var_ref, $1);
+ %*/
+ }
+ break;
+
+ case 496:
+
+/* Line 1806 of yacc.c */
+#line 4357 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_IVAR((yyvsp[(1) - (1)].id));
+ /*%
+ $$ = dispatch1(var_ref, $1);
+ %*/
+ }
+ break;
+
+ case 497:
+
+/* Line 1806 of yacc.c */
+#line 4365 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = NEW_CVAR((yyvsp[(1) - (1)].id));
+ /*%
+ $$ = dispatch1(var_ref, $1);
+ %*/
+ }
+ break;
+
+ case 499:
+
+/* Line 1806 of yacc.c */
+#line 4376 "parse.y"
+ {
+ lex_state = EXPR_END;
+ /*%%%*/
+ (yyval.id) = (yyvsp[(2) - (2)].id);
+ /*%
+ $$ = dispatch1(symbol, $2);
+ %*/
+ }
+ break;
+
+ case 504:
+
+/* Line 1806 of yacc.c */
+#line 4393 "parse.y"
+ {
+ lex_state = EXPR_END;
+ /*%%%*/
+ (yyval.node) = dsym_node((yyvsp[(2) - (3)].node));
+ /*%
+ $$ = dispatch1(dyna_symbol, $2);
+ %*/
+ }
+ break;
+
+ case 506:
+
+/* Line 1806 of yacc.c */
+#line 4405 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = (yyvsp[(2) - (2)].node);
+ (yyval.node)->nd_lit = negate_lit((yyval.node)->nd_lit);
+ /*%
+ $$ = dispatch2(unary, ID2SYM(idUMinus), $2);
+ %*/
+ }
+ break;
+
+ case 516:
+
+/* Line 1806 of yacc.c */
+#line 4428 "parse.y"
+ {ifndef_ripper((yyval.id) = keyword_nil);}
+ break;
+
+ case 517:
+
+/* Line 1806 of yacc.c */
+#line 4429 "parse.y"
+ {ifndef_ripper((yyval.id) = keyword_self);}
+ break;
+
+ case 518:
+
+/* Line 1806 of yacc.c */
+#line 4430 "parse.y"
+ {ifndef_ripper((yyval.id) = keyword_true);}
+ break;
+
+ case 519:
+
+/* Line 1806 of yacc.c */
+#line 4431 "parse.y"
+ {ifndef_ripper((yyval.id) = keyword_false);}
+ break;
+
+ case 520:
+
+/* Line 1806 of yacc.c */
+#line 4432 "parse.y"
+ {ifndef_ripper((yyval.id) = keyword__FILE__);}
+ break;
+
+ case 521:
+
+/* Line 1806 of yacc.c */
+#line 4433 "parse.y"
+ {ifndef_ripper((yyval.id) = keyword__LINE__);}
+ break;
+
+ case 522:
+
+/* Line 1806 of yacc.c */
+#line 4434 "parse.y"
+ {ifndef_ripper((yyval.id) = keyword__ENCODING__);}
+ break;
+
+ case 523:
+
+/* Line 1806 of yacc.c */
+#line 4438 "parse.y"
+ {
+ /*%%%*/
+ if (!((yyval.node) = gettable((yyvsp[(1) - (1)].id)))) (yyval.node) = NEW_BEGIN(0);
+ /*%
+ if (id_is_var(get_id($1))) {
+ $$ = dispatch1(var_ref, $1);
+ }
+ else {
+ $$ = dispatch1(vcall, $1);
+ }
+ %*/
+ }
+ break;
+
+ case 524:
+
+/* Line 1806 of yacc.c */
+#line 4451 "parse.y"
+ {
+ /*%%%*/
+ if (!((yyval.node) = gettable((yyvsp[(1) - (1)].id)))) (yyval.node) = NEW_BEGIN(0);
+ /*%
+ $$ = dispatch1(var_ref, $1);
+ %*/
+ }
+ break;
+
+ case 525:
+
+/* Line 1806 of yacc.c */
+#line 4461 "parse.y"
+ {
+ (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
+ /*%%%*/
+ /*%
+ $$ = dispatch1(var_field, $$);
+ %*/
+ }
+ break;
+
+ case 526:
+
+/* Line 1806 of yacc.c */
+#line 4469 "parse.y"
+ {
+ (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
+ /*%%%*/
+ /*%
+ $$ = dispatch1(var_field, $$);
+ %*/
+ }
+ break;
+
+ case 529:
+
+/* Line 1806 of yacc.c */
+#line 4483 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = 0;
+ /*%
+ $$ = Qnil;
+ %*/
+ }
+ break;
+
+ case 530:
+
+/* Line 1806 of yacc.c */
+#line 4491 "parse.y"
+ {
+ lex_state = EXPR_BEG;
+ command_start = TRUE;
+ }
+ break;
+
+ case 531:
+
+/* Line 1806 of yacc.c */
+#line 4496 "parse.y"
+ {
+ (yyval.node) = (yyvsp[(3) - (4)].node);
+ }
+ break;
+
+ case 532:
+
+/* Line 1806 of yacc.c */
+#line 4500 "parse.y"
+ {
+ /*%%%*/
+ yyerrok;
+ (yyval.node) = 0;
+ /*%
+ yyerrok;
+ $$ = Qnil;
+ %*/
+ }
+ break;
+
+ case 533:
+
+/* Line 1806 of yacc.c */
+#line 4512 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = (yyvsp[(2) - (3)].node);
+ /*%
+ $$ = dispatch1(paren, $2);
+ %*/
+ lex_state = EXPR_BEG;
+ command_start = TRUE;
+ }
+ break;
+
+ case 534:
+
+/* Line 1806 of yacc.c */
+#line 4521 "parse.y"
+ {
+ (yyval.num) = parser->parser_in_kwarg;
+ parser->parser_in_kwarg = 1;
+ }
+ break;
+
+ case 535:
+
+/* Line 1806 of yacc.c */
+#line 4526 "parse.y"
+ {
+ parser->parser_in_kwarg = (yyvsp[(1) - (3)].num);
+ (yyval.node) = (yyvsp[(2) - (3)].node);
+ lex_state = EXPR_BEG;
+ command_start = TRUE;
+ }
+ break;
+
+ case 536:
+
+/* Line 1806 of yacc.c */
+#line 4535 "parse.y"
+ {
+ (yyval.node) = new_args_tail((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].id));
+ }
+ break;
+
+ case 537:
+
+/* Line 1806 of yacc.c */
+#line 4539 "parse.y"
+ {
+ (yyval.node) = new_args_tail((yyvsp[(1) - (2)].node), Qnone, (yyvsp[(2) - (2)].id));
+ }
+ break;
+
+ case 538:
+
+/* Line 1806 of yacc.c */
+#line 4543 "parse.y"
+ {
+ (yyval.node) = new_args_tail(Qnone, (yyvsp[(1) - (2)].id), (yyvsp[(2) - (2)].id));
+ }
+ break;
+
+ case 539:
+
+/* Line 1806 of yacc.c */
+#line 4547 "parse.y"
+ {
+ (yyval.node) = new_args_tail(Qnone, Qnone, (yyvsp[(1) - (1)].id));
+ }
+ break;
+
+ case 540:
+
+/* Line 1806 of yacc.c */
+#line 4553 "parse.y"
+ {
+ (yyval.node) = (yyvsp[(2) - (2)].node);
+ }
+ break;
+
+ case 541:
+
+/* Line 1806 of yacc.c */
+#line 4557 "parse.y"
+ {
+ (yyval.node) = new_args_tail(Qnone, Qnone, Qnone);
+ }
+ break;
+
+ case 542:
+
+/* Line 1806 of yacc.c */
+#line 4563 "parse.y"
+ {
+ (yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), (yyvsp[(5) - (6)].id), Qnone, (yyvsp[(6) - (6)].node));
+ }
+ break;
+
+ case 543:
+
+/* Line 1806 of yacc.c */
+#line 4567 "parse.y"
+ {
+ (yyval.node) = new_args((yyvsp[(1) - (8)].node), (yyvsp[(3) - (8)].node), (yyvsp[(5) - (8)].id), (yyvsp[(7) - (8)].node), (yyvsp[(8) - (8)].node));
+ }
+ break;
+
+ case 544:
+
+/* Line 1806 of yacc.c */
+#line 4571 "parse.y"
+ {
+ (yyval.node) = new_args((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node), Qnone, Qnone, (yyvsp[(4) - (4)].node));
+ }
+ break;
+
+ case 545:
+
+/* Line 1806 of yacc.c */
+#line 4575 "parse.y"
+ {
+ (yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), Qnone, (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].node));
+ }
+ break;
+
+ case 546:
+
+/* Line 1806 of yacc.c */
+#line 4579 "parse.y"
+ {
+ (yyval.node) = new_args((yyvsp[(1) - (4)].node), Qnone, (yyvsp[(3) - (4)].id), Qnone, (yyvsp[(4) - (4)].node));
+ }
+ break;
+
+ case 547:
+
+/* Line 1806 of yacc.c */
+#line 4583 "parse.y"
+ {
+ (yyval.node) = new_args((yyvsp[(1) - (6)].node), Qnone, (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].node));
+ }
+ break;
+
+ case 548:
+
+/* Line 1806 of yacc.c */
+#line 4587 "parse.y"
+ {
+ (yyval.node) = new_args((yyvsp[(1) - (2)].node), Qnone, Qnone, Qnone, (yyvsp[(2) - (2)].node));
+ }
+ break;
+
+ case 549:
+
+/* Line 1806 of yacc.c */
+#line 4591 "parse.y"
+ {
+ (yyval.node) = new_args(Qnone, (yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), Qnone, (yyvsp[(4) - (4)].node));
+ }
+ break;
+
+ case 550:
+
+/* Line 1806 of yacc.c */
+#line 4595 "parse.y"
+ {
+ (yyval.node) = new_args(Qnone, (yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].node));
+ }
+ break;
+
+ case 551:
+
+/* Line 1806 of yacc.c */
+#line 4599 "parse.y"
+ {
+ (yyval.node) = new_args(Qnone, (yyvsp[(1) - (2)].node), Qnone, Qnone, (yyvsp[(2) - (2)].node));
+ }
+ break;
+
+ case 552:
+
+/* Line 1806 of yacc.c */
+#line 4603 "parse.y"
+ {
+ (yyval.node) = new_args(Qnone, (yyvsp[(1) - (4)].node), Qnone, (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].node));
+ }
+ break;
+
+ case 553:
+
+/* Line 1806 of yacc.c */
+#line 4607 "parse.y"
+ {
+ (yyval.node) = new_args(Qnone, Qnone, (yyvsp[(1) - (2)].id), Qnone, (yyvsp[(2) - (2)].node));
+ }
+ break;
+
+ case 554:
+
+/* Line 1806 of yacc.c */
+#line 4611 "parse.y"
+ {
+ (yyval.node) = new_args(Qnone, Qnone, (yyvsp[(1) - (4)].id), (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].node));
+ }
+ break;
+
+ case 555:
+
+/* Line 1806 of yacc.c */
+#line 4615 "parse.y"
+ {
+ (yyval.node) = new_args(Qnone, Qnone, Qnone, Qnone, (yyvsp[(1) - (1)].node));
+ }
+ break;
+
+ case 556:
+
+/* Line 1806 of yacc.c */
+#line 4619 "parse.y"
+ {
+ (yyval.node) = new_args_tail(Qnone, Qnone, Qnone);
+ (yyval.node) = new_args(Qnone, Qnone, Qnone, Qnone, (yyval.node));
+ }
+ break;
+
+ case 557:
+
+/* Line 1806 of yacc.c */
+#line 4626 "parse.y"
+ {
+ /*%%%*/
+ yyerror("formal argument cannot be a constant");
+ (yyval.id) = 0;
+ /*%
+ $$ = dispatch1(param_error, $1);
+ ripper_error();
+ %*/
+ }
+ break;
+
+ case 558:
+
+/* Line 1806 of yacc.c */
+#line 4636 "parse.y"
+ {
+ /*%%%*/
+ yyerror("formal argument cannot be an instance variable");
+ (yyval.id) = 0;
+ /*%
+ $$ = dispatch1(param_error, $1);
+ ripper_error();
+ %*/
+ }
+ break;
+
+ case 559:
+
+/* Line 1806 of yacc.c */
+#line 4646 "parse.y"
+ {
+ /*%%%*/
+ yyerror("formal argument cannot be a global variable");
+ (yyval.id) = 0;
+ /*%
+ $$ = dispatch1(param_error, $1);
+ ripper_error();
+ %*/
+ }
+ break;
+
+ case 560:
+
+/* Line 1806 of yacc.c */
+#line 4656 "parse.y"
+ {
+ /*%%%*/
+ yyerror("formal argument cannot be a class variable");
+ (yyval.id) = 0;
+ /*%
+ $$ = dispatch1(param_error, $1);
+ ripper_error();
+ %*/
+ }
+ break;
+
+ case 562:
+
+/* Line 1806 of yacc.c */
+#line 4669 "parse.y"
+ {
+ formal_argument(get_id((yyvsp[(1) - (1)].id)));
+ (yyval.id) = (yyvsp[(1) - (1)].id);
+ }
+ break;
+
+ case 563:
+
+/* Line 1806 of yacc.c */
+#line 4676 "parse.y"
+ {
+ ID id = get_id((yyvsp[(1) - (1)].id));
+ arg_var(id);
+ current_arg = id;
+ (yyval.id) = (yyvsp[(1) - (1)].id);
+ }
+ break;
+
+ case 564:
+
+/* Line 1806 of yacc.c */
+#line 4685 "parse.y"
+ {
+ current_arg = 0;
+ /*%%%*/
+ (yyval.node) = NEW_ARGS_AUX((yyvsp[(1) - (1)].id), 1);
+ /*%
+ $$ = get_value($1);
+ %*/
+ }
+ break;
+
+ case 565:
+
+/* Line 1806 of yacc.c */
+#line 4694 "parse.y"
+ {
+ ID tid = internal_id();
+ arg_var(tid);
+ /*%%%*/
+ if (dyna_in_block()) {
+ (yyvsp[(2) - (3)].node)->nd_value = NEW_DVAR(tid);
+ }
+ else {
+ (yyvsp[(2) - (3)].node)->nd_value = NEW_LVAR(tid);
+ }
+ (yyval.node) = NEW_ARGS_AUX(tid, 1);
+ (yyval.node)->nd_next = (yyvsp[(2) - (3)].node);
+ /*%
+ $$ = dispatch1(mlhs_paren, $2);
+ %*/
+ }
+ break;
+
+ case 567:
+
+/* Line 1806 of yacc.c */
+#line 4720 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = (yyvsp[(1) - (3)].node);
+ (yyval.node)->nd_plen++;
+ (yyval.node)->nd_next = block_append((yyval.node)->nd_next, (yyvsp[(3) - (3)].node)->nd_next);
+ rb_gc_force_recycle((VALUE)(yyvsp[(3) - (3)].node));
+ /*%
+ $$ = rb_ary_push($1, $3);
+ %*/
+ }
+ break;
+
+ case 568:
+
+/* Line 1806 of yacc.c */
+#line 4734 "parse.y"
+ {
+ ID id = get_id((yyvsp[(1) - (1)].id));
+ arg_var(formal_argument(id));
+ current_arg = id;
+ (yyval.id) = (yyvsp[(1) - (1)].id);
+ }
+ break;
+
+ case 569:
+
+/* Line 1806 of yacc.c */
+#line 4743 "parse.y"
+ {
+ current_arg = 0;
+ (yyval.node) = assignable((yyvsp[(1) - (2)].id), (yyvsp[(2) - (2)].node));
+ /*%%%*/
+ (yyval.node) = new_kw_arg((yyval.node));
+ /*%
+ $$ = rb_assoc_new($$, $2);
+ %*/
+ }
+ break;
+
+ case 570:
+
+/* Line 1806 of yacc.c */
+#line 4753 "parse.y"
+ {
+ current_arg = 0;
+ (yyval.node) = assignable((yyvsp[(1) - (1)].id), (NODE *)-1);
+ /*%%%*/
+ (yyval.node) = new_kw_arg((yyval.node));
+ /*%
+ $$ = rb_assoc_new($$, 0);
+ %*/
+ }
+ break;
+
+ case 571:
+
+/* Line 1806 of yacc.c */
+#line 4765 "parse.y"
+ {
+ (yyval.node) = assignable((yyvsp[(1) - (2)].id), (yyvsp[(2) - (2)].node));
+ /*%%%*/
+ (yyval.node) = new_kw_arg((yyval.node));
+ /*%
+ $$ = rb_assoc_new($$, $2);
+ %*/
+ }
+ break;
+
+ case 572:
+
+/* Line 1806 of yacc.c */
+#line 4774 "parse.y"
+ {
+ (yyval.node) = assignable((yyvsp[(1) - (1)].id), (NODE *)-1);
+ /*%%%*/
+ (yyval.node) = new_kw_arg((yyval.node));
+ /*%
+ $$ = rb_assoc_new($$, 0);
+ %*/
+ }
+ break;
+
+ case 573:
+
+/* Line 1806 of yacc.c */
+#line 4785 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = (yyvsp[(1) - (1)].node);
+ /*%
+ $$ = rb_ary_new3(1, $1);
+ %*/
+ }
+ break;
+
+ case 574:
+
+/* Line 1806 of yacc.c */
+#line 4793 "parse.y"
+ {
+ /*%%%*/
+ NODE *kws = (yyvsp[(1) - (3)].node);
+
+ while (kws->nd_next) {
+ kws = kws->nd_next;
+ }
+ kws->nd_next = (yyvsp[(3) - (3)].node);
+ (yyval.node) = (yyvsp[(1) - (3)].node);
+ /*%
+ $$ = rb_ary_push($1, $3);
+ %*/
+ }
+ break;
+
+ case 575:
+
+/* Line 1806 of yacc.c */
+#line 4810 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = (yyvsp[(1) - (1)].node);
+ /*%
+ $$ = rb_ary_new3(1, $1);
+ %*/
+ }
+ break;
+
+ case 576:
+
+/* Line 1806 of yacc.c */
+#line 4818 "parse.y"
+ {
+ /*%%%*/
+ NODE *kws = (yyvsp[(1) - (3)].node);
+
+ while (kws->nd_next) {
+ kws = kws->nd_next;
+ }
+ kws->nd_next = (yyvsp[(3) - (3)].node);
+ (yyval.node) = (yyvsp[(1) - (3)].node);
+ /*%
+ $$ = rb_ary_push($1, $3);
+ %*/
+ }
+ break;
+
+ case 579:
+
+/* Line 1806 of yacc.c */
+#line 4838 "parse.y"
+ {
+ shadowing_lvar(get_id((yyvsp[(2) - (2)].id)));
+ (yyval.id) = (yyvsp[(2) - (2)].id);
+ }
+ break;
+
+ case 580:
+
+/* Line 1806 of yacc.c */
+#line 4843 "parse.y"
+ {
+ (yyval.id) = internal_id();
+ arg_var((yyval.id));
+ }
+ break;
+
+ case 581:
+
+/* Line 1806 of yacc.c */
+#line 4850 "parse.y"
+ {
+ current_arg = 0;
+ (yyval.node) = assignable((yyvsp[(1) - (3)].id), (yyvsp[(3) - (3)].node));
+ /*%%%*/
+ (yyval.node) = NEW_OPT_ARG(0, (yyval.node));
+ /*%
+ $$ = rb_assoc_new($$, $3);
+ %*/
+ }
+ break;
+
+ case 582:
+
+/* Line 1806 of yacc.c */
+#line 4862 "parse.y"
+ {
+ current_arg = 0;
+ (yyval.node) = assignable((yyvsp[(1) - (3)].id), (yyvsp[(3) - (3)].node));
+ /*%%%*/
+ (yyval.node) = NEW_OPT_ARG(0, (yyval.node));
+ /*%
+ $$ = rb_assoc_new($$, $3);
+ %*/
+ }
+ break;
+
+ case 583:
+
+/* Line 1806 of yacc.c */
+#line 4874 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = (yyvsp[(1) - (1)].node);
+ /*%
+ $$ = rb_ary_new3(1, $1);
+ %*/
+ }
+ break;
+
+ case 584:
+
+/* Line 1806 of yacc.c */
+#line 4882 "parse.y"
+ {
+ /*%%%*/
+ NODE *opts = (yyvsp[(1) - (3)].node);
+
+ while (opts->nd_next) {
+ opts = opts->nd_next;
+ }
+ opts->nd_next = (yyvsp[(3) - (3)].node);
+ (yyval.node) = (yyvsp[(1) - (3)].node);
+ /*%
+ $$ = rb_ary_push($1, $3);
+ %*/
+ }
+ break;
+
+ case 585:
+
+/* Line 1806 of yacc.c */
+#line 4898 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = (yyvsp[(1) - (1)].node);
+ /*%
+ $$ = rb_ary_new3(1, $1);
+ %*/
+ }
+ break;
+
+ case 586:
+
+/* Line 1806 of yacc.c */
+#line 4906 "parse.y"
+ {
+ /*%%%*/
+ NODE *opts = (yyvsp[(1) - (3)].node);
+
+ while (opts->nd_next) {
+ opts = opts->nd_next;
+ }
+ opts->nd_next = (yyvsp[(3) - (3)].node);
+ (yyval.node) = (yyvsp[(1) - (3)].node);
+ /*%
+ $$ = rb_ary_push($1, $3);
+ %*/
+ }
+ break;
+
+ case 589:
+
+/* Line 1806 of yacc.c */
+#line 4926 "parse.y"
+ {
+ /*%%%*/
+ if (!is_local_id((yyvsp[(2) - (2)].id)))
+ yyerror("rest argument must be local variable");
+ /*% %*/
+ arg_var(shadowing_lvar(get_id((yyvsp[(2) - (2)].id))));
+ /*%%%*/
+ (yyval.id) = (yyvsp[(2) - (2)].id);
+ /*%
+ $$ = dispatch1(rest_param, $2);
+ %*/
+ }
+ break;
+
+ case 590:
+
+/* Line 1806 of yacc.c */
+#line 4939 "parse.y"
+ {
+ /*%%%*/
+ (yyval.id) = internal_id();
+ arg_var((yyval.id));
+ /*%
+ $$ = dispatch1(rest_param, Qnil);
+ %*/
+ }
+ break;
+
+ case 593:
+
+/* Line 1806 of yacc.c */
+#line 4954 "parse.y"
+ {
+ /*%%%*/
+ if (!is_local_id((yyvsp[(2) - (2)].id)))
+ yyerror("block argument must be local variable");
+ else if (!dyna_in_block() && local_id((yyvsp[(2) - (2)].id)))
+ yyerror("duplicated block argument name");
+ /*% %*/
+ arg_var(shadowing_lvar(get_id((yyvsp[(2) - (2)].id))));
+ /*%%%*/
+ (yyval.id) = (yyvsp[(2) - (2)].id);
+ /*%
+ $$ = dispatch1(blockarg, $2);
+ %*/
+ }
+ break;
+
+ case 594:
+
+/* Line 1806 of yacc.c */
+#line 4971 "parse.y"
+ {
+ (yyval.id) = (yyvsp[(2) - (2)].id);
+ }
+ break;
+
+ case 595:
+
+/* Line 1806 of yacc.c */
+#line 4975 "parse.y"
+ {
+ /*%%%*/
+ (yyval.id) = 0;
+ /*%
+ $$ = Qundef;
+ %*/
+ }
+ break;
+
+ case 596:
+
+/* Line 1806 of yacc.c */
+#line 4985 "parse.y"
+ {
+ /*%%%*/
+ value_expr((yyvsp[(1) - (1)].node));
+ (yyval.node) = (yyvsp[(1) - (1)].node);
+ if (!(yyval.node)) (yyval.node) = NEW_NIL();
+ /*%
+ $$ = $1;
+ %*/
+ }
+ break;
+
+ case 597:
+
+/* Line 1806 of yacc.c */
+#line 4994 "parse.y"
+ {lex_state = EXPR_BEG;}
+ break;
+
+ case 598:
+
+/* Line 1806 of yacc.c */
+#line 4995 "parse.y"
+ {
+ /*%%%*/
+ if ((yyvsp[(3) - (4)].node) == 0) {
+ yyerror("can't define singleton method for ().");
+ }
+ else {
+ switch (nd_type((yyvsp[(3) - (4)].node))) {
+ case NODE_STR:
+ case NODE_DSTR:
+ case NODE_XSTR:
+ case NODE_DXSTR:
+ case NODE_DREGX:
+ case NODE_LIT:
+ case NODE_ARRAY:
+ case NODE_ZARRAY:
+ yyerror("can't define singleton method for literals");
+ default:
+ value_expr((yyvsp[(3) - (4)].node));
+ break;
+ }
+ }
+ (yyval.node) = (yyvsp[(3) - (4)].node);
+ /*%
+ $$ = dispatch1(paren, $3);
+ %*/
+ }
+ break;
+
+ case 600:
+
+/* Line 1806 of yacc.c */
+#line 5025 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = (yyvsp[(1) - (2)].node);
+ /*%
+ $$ = dispatch1(assoclist_from_args, $1);
+ %*/
+ }
+ break;
+
+ case 602:
+
+/* Line 1806 of yacc.c */
+#line 5042 "parse.y"
+ {
+ /*%%%*/
+ NODE *assocs = (yyvsp[(1) - (3)].node);
+ NODE *tail = (yyvsp[(3) - (3)].node);
+ if (!assocs) {
+ assocs = tail;
+ }
+ else if (tail) {
+ if (assocs->nd_head &&
+ !tail->nd_head && nd_type(tail->nd_next) == NODE_ARRAY &&
+ nd_type(tail->nd_next->nd_head) == NODE_HASH) {
+ /* DSTAR */
+ tail = tail->nd_next->nd_head->nd_head;
+ }
+ assocs = list_concat(assocs, tail);
+ }
+ (yyval.node) = assocs;
+ /*%
+ $$ = rb_ary_push($1, $3);
+ %*/
+ }
+ break;
+
+ case 603:
+
+/* Line 1806 of yacc.c */
+#line 5066 "parse.y"
+ {
+ /*%%%*/
+ if (nd_type((yyvsp[(1) - (3)].node)) == NODE_STR) {
+ nd_set_type((yyvsp[(1) - (3)].node), NODE_LIT);
+ (yyvsp[(1) - (3)].node)->nd_lit = rb_fstring((yyvsp[(1) - (3)].node)->nd_lit);
+ }
+ (yyval.node) = list_append(NEW_LIST((yyvsp[(1) - (3)].node)), (yyvsp[(3) - (3)].node));
+ /*%
+ $$ = dispatch2(assoc_new, $1, $3);
+ %*/
+ }
+ break;
+
+ case 604:
+
+/* Line 1806 of yacc.c */
+#line 5078 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = list_append(NEW_LIST(NEW_LIT(ID2SYM((yyvsp[(1) - (2)].id)))), (yyvsp[(2) - (2)].node));
+ /*%
+ $$ = dispatch2(assoc_new, $1, $2);
+ %*/
+ }
+ break;
+
+ case 605:
+
+/* Line 1806 of yacc.c */
+#line 5086 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = list_append(NEW_LIST(dsym_node((yyvsp[(2) - (4)].node))), (yyvsp[(4) - (4)].node));
+ /*%
+ $$ = dispatch2(assoc_new, dispatch1(dyna_symbol, $2), $4);
+ %*/
+ }
+ break;
+
+ case 606:
+
+/* Line 1806 of yacc.c */
+#line 5094 "parse.y"
+ {
+ /*%%%*/
+ if (nd_type((yyvsp[(2) - (2)].node)) == NODE_HASH &&
+ !((yyvsp[(2) - (2)].node)->nd_head && (yyvsp[(2) - (2)].node)->nd_head->nd_alen))
+ (yyval.node) = 0;
+ else
+ (yyval.node) = list_append(NEW_LIST(0), (yyvsp[(2) - (2)].node));
+ /*%
+ $$ = dispatch1(assoc_splat, $2);
+ %*/
+ }
+ break;
+
+ case 628:
+
+/* Line 1806 of yacc.c */
+#line 5154 "parse.y"
+ {yyerrok;}
+ break;
+
+ case 631:
+
+/* Line 1806 of yacc.c */
+#line 5159 "parse.y"
+ {yyerrok;}
+ break;
+
+ case 632:
+
+/* Line 1806 of yacc.c */
+#line 5163 "parse.y"
+ {
+ /*%%%*/
+ (yyval.node) = 0;
+ /*%
+ $$ = Qundef;
+ %*/
+ }
+ break;
+
+
+
+/* Line 1806 of yacc.c */
+#line 11466 "parse.c"
+ default: break;
+ }
+ /* User semantic actions sometimes alter yychar, and that requires
+ that yytoken be updated with the new translation. We take the
+ approach of translating immediately before every use of yytoken.
+ One alternative is translating here after every semantic action,
+ but that translation would be missed if the semantic action invokes
+ YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
+ if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an
+ incorrect destructor might then be invoked immediately. In the
+ case of YYERROR or YYBACKUP, subsequent parser actions might lead
+ to an incorrect destructor call or verbose syntax error message
+ before the lookahead is translated. */
+ YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
+
+ YYPOPSTACK (yylen);
+ yylen = 0;
+ YY_STACK_PRINT (yyss, yyssp);
+
+ *++yyvsp = yyval;
+
+ /* Now `shift' the result of the reduction. Determine what state
+ that goes to, based on the state we popped back to and the rule
+ number reduced by. */
+
+ yyn = yyr1[yyn];
+
+ yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
+ if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
+ yystate = yytable[yystate];
+ else
+ yystate = yydefgoto[yyn - YYNTOKENS];
+
+ goto yynewstate;
+
+
+/*------------------------------------.
+| yyerrlab -- here on detecting error |
+`------------------------------------*/
+yyerrlab:
+ /* Make sure we have latest lookahead translation. See comments at
+ user semantic actions for why this is necessary. */
+ yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar);
+
+ /* If not already recovering from an error, report this error. */
+ if (!yyerrstatus)
+ {
+ ++yynerrs;
+#if ! YYERROR_VERBOSE
+ parser_yyerror (parser, YY_("syntax error"));
+#else
+# define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \
+ yyssp, yytoken)
+ {
+ char const *yymsgp = YY_("syntax error");
+ int yysyntax_error_status;
+ yysyntax_error_status = YYSYNTAX_ERROR;
+ if (yysyntax_error_status == 0)
+ yymsgp = yymsg;
+ else if (yysyntax_error_status == 1)
+ {
+ if (yymsg != yymsgbuf)
+ YYSTACK_FREE (yymsg);
+ yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc);
+ if (!yymsg)
+ {
+ yymsg = yymsgbuf;
+ yymsg_alloc = sizeof yymsgbuf;
+ yysyntax_error_status = 2;
+ }
+ else
+ {
+ yysyntax_error_status = YYSYNTAX_ERROR;
+ yymsgp = yymsg;
+ }
+ }
+ parser_yyerror (parser, yymsgp);
+ if (yysyntax_error_status == 2)
+ goto yyexhaustedlab;
+ }
+# undef YYSYNTAX_ERROR
+#endif
+ }
+
+
+
+ if (yyerrstatus == 3)
+ {
+ /* If just tried and failed to reuse lookahead token after an
+ error, discard it. */
+
+ if (yychar <= YYEOF)
+ {
+ /* Return failure if at end of input. */
+ if (yychar == YYEOF)
+ YYABORT;
+ }
+ else
+ {
+ yydestruct ("Error: discarding",
+ yytoken, &yylval, parser);
+ yychar = YYEMPTY;
+ }
+ }
+
+ /* Else will try to reuse lookahead token after shifting the error
+ token. */
+ goto yyerrlab1;
+
+
+/*---------------------------------------------------.
+| yyerrorlab -- error raised explicitly by YYERROR. |
+`---------------------------------------------------*/
+yyerrorlab:
+
+ /* Pacify compilers like GCC when the user code never invokes
+ YYERROR and the label yyerrorlab therefore never appears in user
+ code. */
+ if (/*CONSTCOND*/ 0)
+ goto yyerrorlab;
+
+ /* Do not reclaim the symbols of the rule which action triggered
+ this YYERROR. */
+ YYPOPSTACK (yylen);
+ yylen = 0;
+ YY_STACK_PRINT (yyss, yyssp);
+ yystate = *yyssp;
+ goto yyerrlab1;
+
+
+/*-------------------------------------------------------------.
+| yyerrlab1 -- common code for both syntax error and YYERROR. |
+`-------------------------------------------------------------*/
+yyerrlab1:
+ yyerrstatus = 3; /* Each real token shifted decrements this. */
+
+ for (;;)
+ {
+ yyn = yypact[yystate];
+ if (!yypact_value_is_default (yyn))
+ {
+ yyn += YYTERROR;
+ if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
+ {
+ yyn = yytable[yyn];
+ if (0 < yyn)
+ break;
+ }
+ }
+
+ /* Pop the current state because it cannot handle the error token. */
+ if (yyssp == yyss)
+ YYABORT;
+
+
+ yydestruct ("Error: popping",
+ yystos[yystate], yyvsp, parser);
+ YYPOPSTACK (1);
+ yystate = *yyssp;
+ YY_STACK_PRINT (yyss, yyssp);
+ }
+
+ *++yyvsp = yylval;
+
+
+ /* Shift the error token. */
+ YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
+
+ yystate = yyn;
+ goto yynewstate;
+
+
+/*-------------------------------------.
+| yyacceptlab -- YYACCEPT comes here. |
+`-------------------------------------*/
+yyacceptlab:
+ yyresult = 0;
+ goto yyreturn;
+
+/*-----------------------------------.
+| yyabortlab -- YYABORT comes here. |
+`-----------------------------------*/
+yyabortlab:
+ yyresult = 1;
+ goto yyreturn;
+
+#if !defined(yyoverflow) || YYERROR_VERBOSE
+/*-------------------------------------------------.
+| yyexhaustedlab -- memory exhaustion comes here. |
+`-------------------------------------------------*/
+yyexhaustedlab:
+ parser_yyerror (parser, YY_("memory exhausted"));
+ yyresult = 2;
+ /* Fall through. */
+#endif
+
+yyreturn:
+ if (yychar != YYEMPTY)
+ {
+ /* Make sure we have latest lookahead translation. See comments at
+ user semantic actions for why this is necessary. */
+ yytoken = YYTRANSLATE (yychar);
+ yydestruct ("Cleanup: discarding lookahead",
+ yytoken, &yylval, parser);
+ }
+ /* Do not reclaim the symbols of the rule which action triggered
+ this YYABORT or YYACCEPT. */
+ YYPOPSTACK (yylen);
+ YY_STACK_PRINT (yyss, yyssp);
+ while (yyssp != yyss)
+ {
+ yydestruct ("Cleanup: popping",
+ yystos[*yyssp], yyvsp, parser);
+ YYPOPSTACK (1);
+ }
+#ifndef yyoverflow
+ if (yyss != yyssa)
+ YYSTACK_FREE (yyss);
+#endif
+#if YYERROR_VERBOSE
+ if (yymsg != yymsgbuf)
+ YYSTACK_FREE (yymsg);
+#endif
+ /* Make sure YYID is used. */
+ return YYID (yyresult);
+}
+
+
+
+/* Line 2067 of yacc.c */
+#line 5171 "parse.y"
+
+# undef parser
+# undef yylex
+# undef yylval
+# define yylval (*((YYSTYPE*)(parser->parser_yylval)))
+
+static int parser_regx_options(struct parser_params*);
+static int parser_tokadd_string(struct parser_params*,int,int,int,long*,rb_encoding**);
+static void parser_tokaddmbc(struct parser_params *parser, int c, rb_encoding *enc);
+static int parser_parse_string(struct parser_params*,NODE*);
+static int parser_here_document(struct parser_params*,NODE*);
+
+
+# define nextc() parser_nextc(parser)
+# define pushback(c) parser_pushback(parser, (c))
+# define newtok() parser_newtok(parser)
+# define tokspace(n) parser_tokspace(parser, (n))
+# define tokadd(c) parser_tokadd(parser, (c))
+# define tok_hex(numlen) parser_tok_hex(parser, (numlen))
+# define read_escape(flags,e) parser_read_escape(parser, (flags), (e))
+# define tokadd_escape(e) parser_tokadd_escape(parser, (e))
+# define regx_options() parser_regx_options(parser)
+# define tokadd_string(f,t,p,n,e) parser_tokadd_string(parser,(f),(t),(p),(n),(e))
+# define parse_string(n) parser_parse_string(parser,(n))
+# define tokaddmbc(c, enc) parser_tokaddmbc(parser, (c), (enc))
+# define here_document(n) parser_here_document(parser,(n))
+# define heredoc_identifier() parser_heredoc_identifier(parser)
+# define heredoc_restore(n) parser_heredoc_restore(parser,(n))
+# define whole_match_p(e,l,i) parser_whole_match_p(parser,(e),(l),(i))
+# define number_literal_suffix(f) parser_number_literal_suffix(parser, (f))
+# define set_number_literal(v, t, f) parser_set_number_literal(parser, (v), (t), (f))
+# define set_integer_literal(v, f) parser_set_integer_literal(parser, (v), (f))
+
+#ifndef RIPPER
+# define set_yylval_str(x) (yylval.node = NEW_STR(x))
+# define set_yylval_num(x) (yylval.num = (x))
+# define set_yylval_id(x) (yylval.id = (x))
+# define set_yylval_name(x) (yylval.id = (x))
+# define set_yylval_literal(x) (yylval.node = NEW_LIT(x))
+# define set_yylval_node(x) (yylval.node = (x))
+# define yylval_id() (yylval.id)
+#else
+static inline VALUE
+ripper_yylval_id(ID x)
+{
+ return ripper_new_yylval(x, ID2SYM(x), 0);
+}
+# define set_yylval_str(x) (yylval.val = (x))
+# define set_yylval_num(x) (yylval.val = ripper_new_yylval((x), 0, 0))
+# define set_yylval_id(x) (void)(x)
+# define set_yylval_name(x) (void)(yylval.val = ripper_yylval_id(x))
+# define set_yylval_literal(x) (void)(x)
+# define set_yylval_node(x) (void)(x)
+# define yylval_id() yylval.id
+#endif
+
+#ifndef RIPPER
+#define ripper_flush(p) (void)(p)
+#else
+#define ripper_flush(p) ((p)->tokp = (p)->parser_lex_p)
+
+#define yylval_rval (*(RB_TYPE_P(yylval.val, T_NODE) ? &yylval.node->nd_rval : &yylval.val))
+
+static inline VALUE
+intern_sym(const char *name)
+{
+ ID id = rb_intern_const(name);
+ return ID2SYM(id);
+}
+
+static int
+ripper_has_scan_event(struct parser_params *parser)
+{
+
+ if (lex_p < parser->tokp) rb_raise(rb_eRuntimeError, "lex_p < tokp");
+ return lex_p > parser->tokp;
+}
+
+static VALUE
+ripper_scan_event_val(struct parser_params *parser, int t)
+{
+ VALUE str = STR_NEW(parser->tokp, lex_p - parser->tokp);
+ VALUE rval = ripper_dispatch1(parser, ripper_token2eventid(t), str);
+ ripper_flush(parser);
+ return rval;
+}
+
+static void
+ripper_dispatch_scan_event(struct parser_params *parser, int t)
+{
+ if (!ripper_has_scan_event(parser)) return;
+ yylval_rval = ripper_scan_event_val(parser, t);
+}
+
+static void
+ripper_dispatch_ignored_scan_event(struct parser_params *parser, int t)
+{
+ if (!ripper_has_scan_event(parser)) return;
+ (void)ripper_scan_event_val(parser, t);
+}
+
+static void
+ripper_dispatch_delayed_token(struct parser_params *parser, int t)
+{
+ int saved_line = ruby_sourceline;
+ const char *saved_tokp = parser->tokp;
+
+ ruby_sourceline = parser->delayed_line;
+ parser->tokp = lex_pbeg + parser->delayed_col;
+ yylval_rval = ripper_dispatch1(parser, ripper_token2eventid(t), parser->delayed);
+ parser->delayed = Qnil;
+ ruby_sourceline = saved_line;
+ parser->tokp = saved_tokp;
+}
+#endif /* RIPPER */
+
+#include "ruby/regex.h"
+#include "ruby/util.h"
+
+/* We remove any previous definition of `SIGN_EXTEND_CHAR',
+ since ours (we hope) works properly with all combinations of
+ machines, compilers, `char' and `unsigned char' argument types.
+ (Per Bothner suggested the basic approach.) */
+#undef SIGN_EXTEND_CHAR
+#if __STDC__
+# define SIGN_EXTEND_CHAR(c) ((signed char)(c))
+#else /* not __STDC__ */
+/* As in Harbison and Steele. */
+# define SIGN_EXTEND_CHAR(c) ((((unsigned char)(c)) ^ 128) - 128)
+#endif
+
+#define parser_encoding_name() (current_enc->name)
+#define parser_mbclen() mbclen((lex_p-1),lex_pend,current_enc)
+#define parser_precise_mbclen() rb_enc_precise_mbclen((lex_p-1),lex_pend,current_enc)
+#define is_identchar(p,e,enc) (rb_enc_isalnum((unsigned char)(*(p)),(enc)) || (*(p)) == '_' || !ISASCII(*(p)))
+#define parser_is_identchar() (!parser->eofp && is_identchar((lex_p-1),lex_pend,current_enc))
+
+#define parser_isascii() ISASCII(*(lex_p-1))
+
+#ifndef RIPPER
+static int
+token_info_get_column(struct parser_params *parser, const char *token)
+{
+ int column = 1;
+ const char *p, *pend = lex_p - strlen(token);
+ for (p = lex_pbeg; p < pend; p++) {
+ if (*p == '\t') {
+ column = (((column - 1) / 8) + 1) * 8;
+ }
+ column++;
+ }
+ return column;
+}
+
+static int
+token_info_has_nonspaces(struct parser_params *parser, const char *token)
+{
+ const char *p, *pend = lex_p - strlen(token);
+ for (p = lex_pbeg; p < pend; p++) {
+ if (*p != ' ' && *p != '\t') {
+ return 1;
+ }
+ }
+ return 0;
+}
+
+#undef token_info_push
+static void
+token_info_push(struct parser_params *parser, const char *token)
+{
+ token_info *ptinfo;
+
+ if (!parser->parser_token_info_enabled) return;
+ ptinfo = ALLOC(token_info);
+ ptinfo->token = token;
+ ptinfo->linenum = ruby_sourceline;
+ ptinfo->column = token_info_get_column(parser, token);
+ ptinfo->nonspc = token_info_has_nonspaces(parser, token);
+ ptinfo->next = parser->parser_token_info;
+
+ parser->parser_token_info = ptinfo;
+}
+
+#undef token_info_pop
+static void
+token_info_pop(struct parser_params *parser, const char *token)
+{
+ int linenum;
+ token_info *ptinfo = parser->parser_token_info;
+
+ if (!ptinfo) return;
+ parser->parser_token_info = ptinfo->next;
+ if (token_info_get_column(parser, token) == ptinfo->column) { /* OK */
+ goto finish;
+ }
+ linenum = ruby_sourceline;
+ if (linenum == ptinfo->linenum) { /* SKIP */
+ goto finish;
+ }
+ if (token_info_has_nonspaces(parser, token) || ptinfo->nonspc) { /* SKIP */
+ goto finish;
+ }
+ if (parser->parser_token_info_enabled) {
+ rb_compile_warn(ruby_sourcefile, linenum,
+ "mismatched indentations at '%s' with '%s' at %d",
+ token, ptinfo->token, ptinfo->linenum);
+ }
+
+ finish:
+ xfree(ptinfo);
+}
+#endif /* RIPPER */
+
+static int
+parser_yyerror(struct parser_params *parser, const char *msg)
+{
+#ifndef RIPPER
+ const int max_line_margin = 30;
+ const char *p, *pe;
+ char *buf;
+ long len;
+ int i;
+
+ compile_error(PARSER_ARG "%s", msg);
+ p = lex_p;
+ while (lex_pbeg <= p) {
+ if (*p == '\n') break;
+ p--;
+ }
+ p++;
+
+ pe = lex_p;
+ while (pe < lex_pend) {
+ if (*pe == '\n') break;
+ pe++;
+ }
+
+ len = pe - p;
+ if (len > 4) {
+ char *p2;
+ const char *pre = "", *post = "";
+
+ if (len > max_line_margin * 2 + 10) {
+ if (lex_p - p > max_line_margin) {
+ p = rb_enc_prev_char(p, lex_p - max_line_margin, pe, rb_enc_get(lex_lastline));
+ pre = "...";
+ }
+ if (pe - lex_p > max_line_margin) {
+ pe = rb_enc_prev_char(lex_p, lex_p + max_line_margin, pe, rb_enc_get(lex_lastline));
+ post = "...";
+ }
+ len = pe - p;
+ }
+ buf = ALLOCA_N(char, len+2);
+ MEMCPY(buf, p, char, len);
+ buf[len] = '\0';
+ rb_compile_error_with_enc(NULL, 0, (void *)current_enc, "%s%s%s", pre, buf, post);
+
+ i = (int)(lex_p - p);
+ p2 = buf; pe = buf + len;
+
+ while (p2 < pe) {
+ if (*p2 != '\t') *p2 = ' ';
+ p2++;
+ }
+ buf[i] = '^';
+ buf[i+1] = '\0';
+ rb_compile_error_append("%s%s", pre, buf);
+ }
+#else
+ dispatch1(parse_error, STR_NEW2(msg));
+ ripper_error();
+#endif /* !RIPPER */
+ return 0;
+}
+
+static void parser_prepare(struct parser_params *parser);
+
+#ifndef RIPPER
+static VALUE
+debug_lines(VALUE fname)
+{
+ ID script_lines;
+ CONST_ID(script_lines, "SCRIPT_LINES__");
+ if (rb_const_defined_at(rb_cObject, script_lines)) {
+ VALUE hash = rb_const_get_at(rb_cObject, script_lines);
+ if (RB_TYPE_P(hash, T_HASH)) {
+ VALUE lines = rb_ary_new();
+ rb_hash_aset(hash, fname, lines);
+ return lines;
+ }
+ }
+ return 0;
+}
+
+static VALUE
+coverage(VALUE fname, int n)
+{
+ VALUE coverages = rb_get_coverages();
+ if (RTEST(coverages) && RBASIC(coverages)->klass == 0) {
+ VALUE lines = rb_ary_tmp_new_fill(n);
+ rb_hash_aset(coverages, fname, lines);
+ return lines;
+ }
+ return 0;
+}
+
+static int
+e_option_supplied(struct parser_params *parser)
+{
+ return strcmp(ruby_sourcefile, "-e") == 0;
+}
+
+static VALUE
+yycompile0(VALUE arg)
+{
+ int n;
+ NODE *tree;
+ struct parser_params *parser = (struct parser_params *)arg;
+
+ if (!compile_for_eval && rb_safe_level() == 0) {
+ ruby_debug_lines = debug_lines(ruby_sourcefile_string);
+ if (ruby_debug_lines && ruby_sourceline > 0) {
+ VALUE str = STR_NEW0();
+ n = ruby_sourceline;
+ do {
+ rb_ary_push(ruby_debug_lines, str);
+ } while (--n);
+ }
+
+ if (!e_option_supplied(parser)) {
+ ruby_coverage = coverage(ruby_sourcefile_string, ruby_sourceline);
+ }
+ }
+ parser->last_cr_line = ruby_sourceline - 1;
+
+ parser_prepare(parser);
+ deferred_nodes = 0;
+#ifndef RIPPER
+ parser->parser_token_info_enabled = !compile_for_eval && RTEST(ruby_verbose);
+#endif
+#ifndef RIPPER
+ if (RUBY_DTRACE_PARSE_BEGIN_ENABLED()) {
+ RUBY_DTRACE_PARSE_BEGIN(parser->parser_ruby_sourcefile,
+ parser->parser_ruby_sourceline);
+ }
+#endif
+ n = yyparse((void*)parser);
+#ifndef RIPPER
+ if (RUBY_DTRACE_PARSE_END_ENABLED()) {
+ RUBY_DTRACE_PARSE_END(parser->parser_ruby_sourcefile,
+ parser->parser_ruby_sourceline);
+ }
+#endif
+ ruby_debug_lines = 0;
+ ruby_coverage = 0;
+ compile_for_eval = 0;
+
+ lex_strterm = 0;
+ lex_p = lex_pbeg = lex_pend = 0;
+ lex_lastline = lex_nextline = 0;
+ if (parser->nerr) {
+ return 0;
+ }
+ tree = ruby_eval_tree;
+ if (!tree) {
+ tree = NEW_NIL();
+ }
+ else if (ruby_eval_tree_begin) {
+ tree->nd_body = NEW_PRELUDE(ruby_eval_tree_begin, tree->nd_body);
+ }
+ return (VALUE)tree;
+}
+
+static NODE*
+yycompile(struct parser_params *parser, VALUE fname, int line)
+{
+ ruby_sourcefile_string = rb_str_new_frozen(fname);
+ ruby_sourcefile = RSTRING_PTR(fname);
+ ruby_sourceline = line - 1;
+ return (NODE *)rb_suppress_tracing(yycompile0, (VALUE)parser);
+}
+#endif /* !RIPPER */
+
+static rb_encoding *
+must_be_ascii_compatible(VALUE s)
+{
+ rb_encoding *enc = rb_enc_get(s);
+ if (!rb_enc_asciicompat(enc)) {
+ rb_raise(rb_eArgError, "invalid source encoding");
+ }
+ return enc;
+}
+
+static VALUE
+lex_get_str(struct parser_params *parser, VALUE s)
+{
+ char *beg, *end, *start;
+ long len;
+
+ beg = RSTRING_PTR(s);
+ len = RSTRING_LEN(s);
+ start = beg;
+ if (lex_gets_ptr) {
+ if (len == lex_gets_ptr) return Qnil;
+ beg += lex_gets_ptr;
+ len -= lex_gets_ptr;
+ }
+ end = memchr(beg, '\n', len);
+ if (end) len = ++end - beg;
+ lex_gets_ptr += len;
+ return rb_str_subseq(s, beg - start, len);
+}
+
+static VALUE
+lex_getline(struct parser_params *parser)
+{
+ VALUE line = (*parser->parser_lex_gets)(parser, parser->parser_lex_input);
+ if (NIL_P(line)) return line;
+ must_be_ascii_compatible(line);
+#ifndef RIPPER
+ if (ruby_debug_lines) {
+ rb_enc_associate(line, current_enc);
+ rb_ary_push(ruby_debug_lines, line);
+ }
+ if (ruby_coverage) {
+ rb_ary_push(ruby_coverage, Qnil);
+ }
+#endif
+ return line;
+}
+
+static const rb_data_type_t parser_data_type;
+
+#ifndef RIPPER
+static NODE*
+parser_compile_string(volatile VALUE vparser, VALUE fname, VALUE s, int line)
+{
+ struct parser_params *parser;
+ NODE *node;
+
+ TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
+ lex_gets = lex_get_str;
+ lex_gets_ptr = 0;
+ lex_input = rb_str_new_frozen(s);
+ lex_pbeg = lex_p = lex_pend = 0;
+ compile_for_eval = rb_parse_in_eval();
+
+ node = yycompile(parser, fname, line);
+ RB_GC_GUARD(vparser); /* prohibit tail call optimization */
+
+ return node;
+}
+
+NODE*
+rb_compile_string(const char *f, VALUE s, int line)
+{
+ must_be_ascii_compatible(s);
+ return parser_compile_string(rb_parser_new(), rb_filesystem_str_new_cstr(f), s, line);
+}
+
+NODE*
+rb_parser_compile_string(volatile VALUE vparser, const char *f, VALUE s, int line)
+{
+ return rb_parser_compile_string_path(vparser, rb_filesystem_str_new_cstr(f), s, line);
+}
+
+NODE*
+rb_parser_compile_string_path(volatile VALUE vparser, VALUE f, VALUE s, int line)
+{
+ must_be_ascii_compatible(s);
+ return parser_compile_string(vparser, f, s, line);
+}
+
+NODE*
+rb_compile_cstr(const char *f, const char *s, int len, int line)
+{
+ VALUE str = rb_str_new(s, len);
+ return parser_compile_string(rb_parser_new(), rb_filesystem_str_new_cstr(f), str, line);
+}
+
+NODE*
+rb_parser_compile_cstr(volatile VALUE vparser, const char *f, const char *s, int len, int line)
+{
+ VALUE str = rb_str_new(s, len);
+ return parser_compile_string(vparser, rb_filesystem_str_new_cstr(f), str, line);
+}
+
+static VALUE
+lex_io_gets(struct parser_params *parser, VALUE io)
+{
+ return rb_io_gets(io);
+}
+
+NODE*
+rb_compile_file(const char *f, VALUE file, int start)
+{
+ VALUE volatile vparser = rb_parser_new();
+
+ return rb_parser_compile_file(vparser, f, file, start);
+}
+
+NODE*
+rb_parser_compile_file(volatile VALUE vparser, const char *f, VALUE file, int start)
+{
+ return rb_parser_compile_file_path(vparser, rb_filesystem_str_new_cstr(f), file, start);
+}
+
+NODE*
+rb_parser_compile_file_path(volatile VALUE vparser, VALUE fname, VALUE file, int start)
+{
+ struct parser_params *parser;
+ NODE *node;
+
+ TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
+ lex_gets = lex_io_gets;
+ lex_input = file;
+ lex_pbeg = lex_p = lex_pend = 0;
+ compile_for_eval = rb_parse_in_eval();
+
+ node = yycompile(parser, fname, start);
+ RB_GC_GUARD(vparser); /* prohibit tail call optimization */
+
+ return node;
+}
+#endif /* !RIPPER */
+
+#define STR_FUNC_ESCAPE 0x01
+#define STR_FUNC_EXPAND 0x02
+#define STR_FUNC_REGEXP 0x04
+#define STR_FUNC_QWORDS 0x08
+#define STR_FUNC_SYMBOL 0x10
+#define STR_FUNC_INDENT 0x20
+
+enum string_type {
+ str_squote = (0),
+ str_dquote = (STR_FUNC_EXPAND),
+ str_xquote = (STR_FUNC_EXPAND),
+ str_regexp = (STR_FUNC_REGEXP|STR_FUNC_ESCAPE|STR_FUNC_EXPAND),
+ str_sword = (STR_FUNC_QWORDS),
+ str_dword = (STR_FUNC_QWORDS|STR_FUNC_EXPAND),
+ str_ssym = (STR_FUNC_SYMBOL),
+ str_dsym = (STR_FUNC_SYMBOL|STR_FUNC_EXPAND)
+};
+
+static VALUE
+parser_str_new(const char *p, long n, rb_encoding *enc, int func, rb_encoding *enc0)
+{
+ VALUE str;
+
+ str = rb_enc_str_new(p, n, enc);
+ if (!(func & STR_FUNC_REGEXP) && rb_enc_asciicompat(enc)) {
+ if (rb_enc_str_coderange(str) == ENC_CODERANGE_7BIT) {
+ }
+ else if (enc0 == rb_usascii_encoding() && enc != rb_utf8_encoding()) {
+ rb_enc_associate(str, rb_ascii8bit_encoding());
+ }
+ }
+
+ return str;
+}
+
+#define lex_goto_eol(parser) ((parser)->parser_lex_p = (parser)->parser_lex_pend)
+#define lex_eol_p() (lex_p >= lex_pend)
+#define peek(c) peek_n((c), 0)
+#define peek_n(c,n) (lex_p+(n) < lex_pend && (c) == (unsigned char)lex_p[n])
+#define peekc() peekc_n(0)
+#define peekc_n(n) (lex_p+(n) < lex_pend ? (unsigned char)lex_p[n] : -1)
+
+static inline int
+parser_nextc(struct parser_params *parser)
+{
+ int c;
+
+ if (lex_p == lex_pend) {
+ VALUE v = lex_nextline;
+ lex_nextline = 0;
+ if (!v) {
+ if (parser->eofp)
+ return -1;
+
+ if (!lex_input || NIL_P(v = lex_getline(parser))) {
+ parser->eofp = Qtrue;
+ lex_goto_eol(parser);
+ return -1;
+ }
+ }
+ {
+#ifdef RIPPER
+ if (parser->tokp < lex_pend) {
+ if (NIL_P(parser->delayed)) {
+ parser->delayed = rb_str_buf_new(1024);
+ rb_enc_associate(parser->delayed, current_enc);
+ rb_str_buf_cat(parser->delayed,
+ parser->tokp, lex_pend - parser->tokp);
+ parser->delayed_line = ruby_sourceline;
+ parser->delayed_col = (int)(parser->tokp - lex_pbeg);
+ }
+ else {
+ rb_str_buf_cat(parser->delayed,
+ parser->tokp, lex_pend - parser->tokp);
+ }
+ }
+#endif
+ if (heredoc_end > 0) {
+ ruby_sourceline = heredoc_end;
+ heredoc_end = 0;
+ }
+ ruby_sourceline++;
+ parser->line_count++;
+ lex_pbeg = lex_p = RSTRING_PTR(v);
+ lex_pend = lex_p + RSTRING_LEN(v);
+ ripper_flush(parser);
+ lex_lastline = v;
+ }
+ }
+ c = (unsigned char)*lex_p++;
+ if (c == '\r') {
+ if (peek('\n')) {
+ lex_p++;
+ c = '\n';
+ }
+ else if (ruby_sourceline > parser->last_cr_line) {
+ parser->last_cr_line = ruby_sourceline;
+ rb_compile_warn(ruby_sourcefile, ruby_sourceline, "encountered \\r in middle of line, treated as a mere space");
+ }
+ }
+
+ return c;
+}
+
+static void
+parser_pushback(struct parser_params *parser, int c)
+{
+ if (c == -1) return;
+ lex_p--;
+ if (lex_p > lex_pbeg && lex_p[0] == '\n' && lex_p[-1] == '\r') {
+ lex_p--;
+ }
+}
+
+#define was_bol() (lex_p == lex_pbeg + 1)
+
+#define tokfix() (tokenbuf[tokidx]='\0')
+#define tok() tokenbuf
+#define toklen() tokidx
+#define toklast() (tokidx>0?tokenbuf[tokidx-1]:0)
+
+static char*
+parser_newtok(struct parser_params *parser)
+{
+ tokidx = 0;
+ tokline = ruby_sourceline;
+ if (!tokenbuf) {
+ toksiz = 60;
+ tokenbuf = ALLOC_N(char, 60);
+ }
+ if (toksiz > 4096) {
+ toksiz = 60;
+ REALLOC_N(tokenbuf, char, 60);
+ }
+ return tokenbuf;
+}
+
+static char *
+parser_tokspace(struct parser_params *parser, int n)
+{
+ tokidx += n;
+
+ if (tokidx >= toksiz) {
+ do {toksiz *= 2;} while (toksiz < tokidx);
+ REALLOC_N(tokenbuf, char, toksiz);
+ }
+ return &tokenbuf[tokidx-n];
+}
+
+static void
+parser_tokadd(struct parser_params *parser, int c)
+{
+ tokenbuf[tokidx++] = (char)c;
+ if (tokidx >= toksiz) {
+ toksiz *= 2;
+ REALLOC_N(tokenbuf, char, toksiz);
+ }
+}
+
+static int
+parser_tok_hex(struct parser_params *parser, size_t *numlen)
+{
+ int c;
+
+ c = scan_hex(lex_p, 2, numlen);
+ if (!*numlen) {
+ yyerror("invalid hex escape");
+ return 0;
+ }
+ lex_p += *numlen;
+ return c;
+}
+
+#define tokcopy(n) memcpy(tokspace(n), lex_p - (n), (n))
+
+/* return value is for ?\u3042 */
+static int
+parser_tokadd_utf8(struct parser_params *parser, rb_encoding **encp,
+ int string_literal, int symbol_literal, int regexp_literal)
+{
+ /*
+ * If string_literal is true, then we allow multiple codepoints
+ * in \u{}, and add the codepoints to the current token.
+ * Otherwise we're parsing a character literal and return a single
+ * codepoint without adding it
+ */
+
+ int codepoint;
+ size_t numlen;
+
+ if (regexp_literal) { tokadd('\\'); tokadd('u'); }
+
+ if (peek('{')) { /* handle \u{...} form */
+ do {
+ if (regexp_literal) { tokadd(*lex_p); }
+ nextc();
+ codepoint = scan_hex(lex_p, 6, &numlen);
+ if (numlen == 0) {
+ yyerror("invalid Unicode escape");
+ return 0;
+ }
+ if (codepoint > 0x10ffff) {
+ yyerror("invalid Unicode codepoint (too large)");
+ return 0;
+ }
+ lex_p += numlen;
+ if (regexp_literal) {
+ tokcopy((int)numlen);
+ }
+ else if (codepoint >= 0x80) {
+ *encp = rb_utf8_encoding();
+ if (string_literal) tokaddmbc(codepoint, *encp);
+ }
+ else if (string_literal) {
+ tokadd(codepoint);
+ }
+ } while (string_literal && (peek(' ') || peek('\t')));
+
+ if (!peek('}')) {
+ yyerror("unterminated Unicode escape");
+ return 0;
+ }
+
+ if (regexp_literal) { tokadd('}'); }
+ nextc();
+ }
+ else { /* handle \uxxxx form */
+ codepoint = scan_hex(lex_p, 4, &numlen);
+ if (numlen < 4) {
+ yyerror("invalid Unicode escape");
+ return 0;
+ }
+ lex_p += 4;
+ if (regexp_literal) {
+ tokcopy(4);
+ }
+ else if (codepoint >= 0x80) {
+ *encp = rb_utf8_encoding();
+ if (string_literal) tokaddmbc(codepoint, *encp);
+ }
+ else if (string_literal) {
+ tokadd(codepoint);
+ }
+ }
+
+ return codepoint;
+}
+
+#define ESCAPE_CONTROL 1
+#define ESCAPE_META 2
+
+static int
+parser_read_escape(struct parser_params *parser, int flags,
+ rb_encoding **encp)
+{
+ int c;
+ size_t numlen;
+
+ switch (c = nextc()) {
+ case '\\': /* Backslash */
+ return c;
+
+ case 'n': /* newline */
+ return '\n';
+
+ case 't': /* horizontal tab */
+ return '\t';
+
+ case 'r': /* carriage-return */
+ return '\r';
+
+ case 'f': /* form-feed */
+ return '\f';
+
+ case 'v': /* vertical tab */
+ return '\13';
+
+ case 'a': /* alarm(bell) */
+ return '\007';
+
+ case 'e': /* escape */
+ return 033;
+
+ case '0': case '1': case '2': case '3': /* octal constant */
+ case '4': case '5': case '6': case '7':
+ pushback(c);
+ c = scan_oct(lex_p, 3, &numlen);
+ lex_p += numlen;
+ return c;
+
+ case 'x': /* hex constant */
+ c = tok_hex(&numlen);
+ if (numlen == 0) return 0;
+ return c;
+
+ case 'b': /* backspace */
+ return '\010';
+
+ case 's': /* space */
+ return ' ';
+
+ case 'M':
+ if (flags & ESCAPE_META) goto eof;
+ if ((c = nextc()) != '-') {
+ pushback(c);
+ goto eof;
+ }
+ if ((c = nextc()) == '\\') {
+ if (peek('u')) goto eof;
+ return read_escape(flags|ESCAPE_META, encp) | 0x80;
+ }
+ else if (c == -1 || !ISASCII(c)) goto eof;
+ else {
+ return ((c & 0xff) | 0x80);
+ }
+
+ case 'C':
+ if ((c = nextc()) != '-') {
+ pushback(c);
+ goto eof;
+ }
+ case 'c':
+ if (flags & ESCAPE_CONTROL) goto eof;
+ if ((c = nextc())== '\\') {
+ if (peek('u')) goto eof;
+ c = read_escape(flags|ESCAPE_CONTROL, encp);
+ }
+ else if (c == '?')
+ return 0177;
+ else if (c == -1 || !ISASCII(c)) goto eof;
+ return c & 0x9f;
+
+ eof:
+ case -1:
+ yyerror("Invalid escape character syntax");
+ return '\0';
+
+ default:
+ return c;
+ }
+}
+
+static void
+parser_tokaddmbc(struct parser_params *parser, int c, rb_encoding *enc)
+{
+ int len = rb_enc_codelen(c, enc);
+ rb_enc_mbcput(c, tokspace(len), enc);
+}
+
+static int
+parser_tokadd_escape(struct parser_params *parser, rb_encoding **encp)
+{
+ int c;
+ int flags = 0;
+ size_t numlen;
+
+ first:
+ switch (c = nextc()) {
+ case '\n':
+ return 0; /* just ignore */
+
+ case '0': case '1': case '2': case '3': /* octal constant */
+ case '4': case '5': case '6': case '7':
+ {
+ ruby_scan_oct(--lex_p, 3, &numlen);
+ if (numlen == 0) goto eof;
+ lex_p += numlen;
+ tokcopy((int)numlen + 1);
+ }
+ return 0;
+
+ case 'x': /* hex constant */
+ {
+ tok_hex(&numlen);
+ if (numlen == 0) return -1;
+ tokcopy((int)numlen + 2);
+ }
+ return 0;
+
+ case 'M':
+ if (flags & ESCAPE_META) goto eof;
+ if ((c = nextc()) != '-') {
+ pushback(c);
+ goto eof;
+ }
+ tokcopy(3);
+ flags |= ESCAPE_META;
+ goto escaped;
+
+ case 'C':
+ if (flags & ESCAPE_CONTROL) goto eof;
+ if ((c = nextc()) != '-') {
+ pushback(c);
+ goto eof;
+ }
+ tokcopy(3);
+ goto escaped;
+
+ case 'c':
+ if (flags & ESCAPE_CONTROL) goto eof;
+ tokcopy(2);
+ flags |= ESCAPE_CONTROL;
+ escaped:
+ if ((c = nextc()) == '\\') {
+ goto first;
+ }
+ else if (c == -1) goto eof;
+ tokadd(c);
+ return 0;
+
+ eof:
+ case -1:
+ yyerror("Invalid escape character syntax");
+ return -1;
+
+ default:
+ tokadd('\\');
+ tokadd(c);
+ }
+ return 0;
+}
+
+static int
+parser_regx_options(struct parser_params *parser)
+{
+ int kcode = 0;
+ int kopt = 0;
+ int options = 0;
+ int c, opt, kc;
+
+ newtok();
+ while (c = nextc(), ISALPHA(c)) {
+ if (c == 'o') {
+ options |= RE_OPTION_ONCE;
+ }
+ else if (rb_char_to_option_kcode(c, &opt, &kc)) {
+ if (kc >= 0) {
+ if (kc != rb_ascii8bit_encindex()) kcode = c;
+ kopt = opt;
+ }
+ else {
+ options |= opt;
+ }
+ }
+ else {
+ tokadd(c);
+ }
+ }
+ options |= kopt;
+ pushback(c);
+ if (toklen()) {
+ tokfix();
+ compile_error(PARSER_ARG "unknown regexp option%s - %s",
+ toklen() > 1 ? "s" : "", tok());
+ }
+ return options | RE_OPTION_ENCODING(kcode);
+}
+
+static void
+dispose_string(VALUE str)
+{
+ rb_str_free(str);
+ rb_gc_force_recycle(str);
+}
+
+static int
+parser_tokadd_mbchar(struct parser_params *parser, int c)
+{
+ int len = parser_precise_mbclen();
+ if (!MBCLEN_CHARFOUND_P(len)) {
+ compile_error(PARSER_ARG "invalid multibyte char (%s)", parser_encoding_name());
+ return -1;
+ }
+ tokadd(c);
+ lex_p += --len;
+ if (len > 0) tokcopy(len);
+ return c;
+}
+
+#define tokadd_mbchar(c) parser_tokadd_mbchar(parser, (c))
+
+static inline int
+simple_re_meta(int c)
+{
+ switch (c) {
+ case '$': case '*': case '+': case '.':
+ case '?': case '^': case '|':
+ case ')': case ']': case '}': case '>':
+ return TRUE;
+ default:
+ return FALSE;
+ }
+}
+
+static int
+parser_tokadd_string(struct parser_params *parser,
+ int func, int term, int paren, long *nest,
+ rb_encoding **encp)
+{
+ int c;
+ int has_nonascii = 0;
+ rb_encoding *enc = *encp;
+ char *errbuf = 0;
+ static const char mixed_msg[] = "%s mixed within %s source";
+
+#define mixed_error(enc1, enc2) if (!errbuf) { \
+ size_t len = sizeof(mixed_msg) - 4; \
+ len += strlen(rb_enc_name(enc1)); \
+ len += strlen(rb_enc_name(enc2)); \
+ errbuf = ALLOCA_N(char, len); \
+ snprintf(errbuf, len, mixed_msg, \
+ rb_enc_name(enc1), \
+ rb_enc_name(enc2)); \
+ yyerror(errbuf); \
+ }
+#define mixed_escape(beg, enc1, enc2) do { \
+ const char *pos = lex_p; \
+ lex_p = (beg); \
+ mixed_error((enc1), (enc2)); \
+ lex_p = pos; \
+ } while (0)
+
+ while ((c = nextc()) != -1) {
+ if (paren && c == paren) {
+ ++*nest;
+ }
+ else if (c == term) {
+ if (!nest || !*nest) {
+ pushback(c);
+ break;
+ }
+ --*nest;
+ }
+ else if ((func & STR_FUNC_EXPAND) && c == '#' && lex_p < lex_pend) {
+ int c2 = *lex_p;
+ if (c2 == '$' || c2 == '@' || c2 == '{') {
+ pushback(c);
+ break;
+ }
+ }
+ else if (c == '\\') {
+ const char *beg = lex_p - 1;
+ c = nextc();
+ switch (c) {
+ case '\n':
+ if (func & STR_FUNC_QWORDS) break;
+ if (func & STR_FUNC_EXPAND) continue;
+ tokadd('\\');
+ break;
+
+ case '\\':
+ if (func & STR_FUNC_ESCAPE) tokadd(c);
+ break;
+
+ case 'u':
+ if ((func & STR_FUNC_EXPAND) == 0) {
+ tokadd('\\');
+ break;
+ }
+ parser_tokadd_utf8(parser, &enc, 1,
+ func & STR_FUNC_SYMBOL,
+ func & STR_FUNC_REGEXP);
+ if (has_nonascii && enc != *encp) {
+ mixed_escape(beg, enc, *encp);
+ }
+ continue;
+
+ default:
+ if (c == -1) return -1;
+ if (!ISASCII(c)) {
+ if ((func & STR_FUNC_EXPAND) == 0) tokadd('\\');
+ goto non_ascii;
+ }
+ if (func & STR_FUNC_REGEXP) {
+ if (c == term && !simple_re_meta(c)) {
+ tokadd(c);
+ continue;
+ }
+ pushback(c);
+ if ((c = tokadd_escape(&enc)) < 0)
+ return -1;
+ if (has_nonascii && enc != *encp) {
+ mixed_escape(beg, enc, *encp);
+ }
+ continue;
+ }
+ else if (func & STR_FUNC_EXPAND) {
+ pushback(c);
+ if (func & STR_FUNC_ESCAPE) tokadd('\\');
+ c = read_escape(0, &enc);
+ }
+ else if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) {
+ /* ignore backslashed spaces in %w */
+ }
+ else if (c != term && !(paren && c == paren)) {
+ tokadd('\\');
+ pushback(c);
+ continue;
+ }
+ }
+ }
+ else if (!parser_isascii()) {
+ non_ascii:
+ has_nonascii = 1;
+ if (enc != *encp) {
+ mixed_error(enc, *encp);
+ continue;
+ }
+ if (tokadd_mbchar(c) == -1) return -1;
+ continue;
+ }
+ else if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) {
+ pushback(c);
+ break;
+ }
+ if (c & 0x80) {
+ has_nonascii = 1;
+ if (enc != *encp) {
+ mixed_error(enc, *encp);
+ continue;
+ }
+ }
+ tokadd(c);
+ }
+ *encp = enc;
+ return c;
+}
+
+#define NEW_STRTERM(func, term, paren) \
+ rb_node_newnode(NODE_STRTERM, (func), (term) | ((paren) << (CHAR_BIT * 2)), 0)
+
+#ifdef RIPPER
+static void
+ripper_flush_string_content(struct parser_params *parser, rb_encoding *enc)
+{
+ VALUE content = yylval.val;
+ if (!ripper_is_node_yylval(content))
+ content = ripper_new_yylval(0, 0, content);
+ if (!NIL_P(parser->delayed)) {
+ ptrdiff_t len = lex_p - parser->tokp;
+ if (len > 0) {
+ rb_enc_str_buf_cat(parser->delayed, parser->tokp, len, enc);
+ }
+ ripper_dispatch_delayed_token(parser, tSTRING_CONTENT);
+ parser->tokp = lex_p;
+ RNODE(content)->nd_rval = yylval.val;
+ }
+ ripper_dispatch_scan_event(parser, tSTRING_CONTENT);
+ if (yylval.val != content)
+ RNODE(content)->nd_rval = yylval.val;
+ yylval.val = content;
+}
+
+#define flush_string_content(enc) ripper_flush_string_content(parser, (enc))
+#else
+#define flush_string_content(enc) ((void)(enc))
+#endif
+
+RUBY_FUNC_EXPORTED const unsigned int ruby_global_name_punct_bits[(0x7e - 0x20 + 31) / 32];
+/* this can be shared with ripper, since it's independent from struct
+ * parser_params. */
+#ifndef RIPPER
+#define BIT(c, idx) (((c) / 32 - 1 == idx) ? (1U << ((c) % 32)) : 0)
+#define SPECIAL_PUNCT(idx) ( \
+ BIT('~', idx) | BIT('*', idx) | BIT('$', idx) | BIT('?', idx) | \
+ BIT('!', idx) | BIT('@', idx) | BIT('/', idx) | BIT('\\', idx) | \
+ BIT(';', idx) | BIT(',', idx) | BIT('.', idx) | BIT('=', idx) | \
+ BIT(':', idx) | BIT('<', idx) | BIT('>', idx) | BIT('\"', idx) | \
+ BIT('&', idx) | BIT('`', idx) | BIT('\'', idx) | BIT('+', idx) | \
+ BIT('0', idx))
+const unsigned int ruby_global_name_punct_bits[] = {
+ SPECIAL_PUNCT(0),
+ SPECIAL_PUNCT(1),
+ SPECIAL_PUNCT(2),
+};
+#undef BIT
+#undef SPECIAL_PUNCT
+#endif
+
+static int
+parser_peek_variable_name(struct parser_params *parser)
+{
+ int c;
+ const char *p = lex_p;
+
+ if (p + 1 >= lex_pend) return 0;
+ c = *p++;
+ switch (c) {
+ case '$':
+ if ((c = *p) == '-') {
+ if (++p >= lex_pend) return 0;
+ c = *p;
+ }
+ else if (is_global_name_punct(c) || ISDIGIT(c)) {
+ return tSTRING_DVAR;
+ }
+ break;
+ case '@':
+ if ((c = *p) == '@') {
+ if (++p >= lex_pend) return 0;
+ c = *p;
+ }
+ break;
+ case '{':
+ lex_p = p;
+ command_start = TRUE;
+ return tSTRING_DBEG;
+ default:
+ return 0;
+ }
+ if (!ISASCII(c) || c == '_' || ISALPHA(c))
+ return tSTRING_DVAR;
+ return 0;
+}
+
+static int
+parser_parse_string(struct parser_params *parser, NODE *quote)
+{
+ int func = (int)quote->nd_func;
+ int term = nd_term(quote);
+ int paren = nd_paren(quote);
+ int c, space = 0;
+ rb_encoding *enc = current_enc;
+
+ if (func == -1) return tSTRING_END;
+ c = nextc();
+ if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) {
+ do {c = nextc();} while (ISSPACE(c));
+ space = 1;
+ }
+ if (c == term && !quote->nd_nest) {
+ if (func & STR_FUNC_QWORDS) {
+ quote->nd_func = -1;
+ return ' ';
+ }
+ if (!(func & STR_FUNC_REGEXP)) return tSTRING_END;
+ set_yylval_num(regx_options());
+#ifdef RIPPER
+ ripper_dispatch_scan_event(parser, tREGEXP_END);
+#endif
+ return tREGEXP_END;
+ }
+ if (space) {
+ pushback(c);
+ return ' ';
+ }
+ newtok();
+ if ((func & STR_FUNC_EXPAND) && c == '#') {
+ int t = parser_peek_variable_name(parser);
+ if (t) return t;
+ tokadd('#');
+ c = nextc();
+ }
+ pushback(c);
+ if (tokadd_string(func, term, paren, &quote->nd_nest,
+ &enc) == -1) {
+ ruby_sourceline = nd_line(quote);
+ if (func & STR_FUNC_REGEXP) {
+ if (parser->eofp)
+ compile_error(PARSER_ARG "unterminated regexp meets end of file");
+ return tREGEXP_END;
+ }
+ else {
+ if (parser->eofp)
+ compile_error(PARSER_ARG "unterminated string meets end of file");
+ return tSTRING_END;
+ }
+ }
+
+ tokfix();
+ set_yylval_str(STR_NEW3(tok(), toklen(), enc, func));
+ flush_string_content(enc);
+
+ return tSTRING_CONTENT;
+}
+
+static int
+parser_heredoc_identifier(struct parser_params *parser)
+{
+ int c = nextc(), term, func = 0;
+ long len;
+
+ if (c == '-') {
+ c = nextc();
+ func = STR_FUNC_INDENT;
+ }
+ switch (c) {
+ case '\'':
+ func |= str_squote; goto quoted;
+ case '"':
+ func |= str_dquote; goto quoted;
+ case '`':
+ func |= str_xquote;
+ quoted:
+ newtok();
+ tokadd(func);
+ term = c;
+ while ((c = nextc()) != -1 && c != term) {
+ if (tokadd_mbchar(c) == -1) return 0;
+ }
+ if (c == -1) {
+ compile_error(PARSER_ARG "unterminated here document identifier");
+ return 0;
+ }
+ break;
+
+ default:
+ if (!parser_is_identchar()) {
+ pushback(c);
+ if (func & STR_FUNC_INDENT) {
+ pushback('-');
+ }
+ return 0;
+ }
+ newtok();
+ term = '"';
+ tokadd(func |= str_dquote);
+ do {
+ if (tokadd_mbchar(c) == -1) return 0;
+ } while ((c = nextc()) != -1 && parser_is_identchar());
+ pushback(c);
+ break;
+ }
+
+ tokfix();
+#ifdef RIPPER
+ ripper_dispatch_scan_event(parser, tHEREDOC_BEG);
+#endif
+ len = lex_p - lex_pbeg;
+ lex_goto_eol(parser);
+ lex_strterm = rb_node_newnode(NODE_HEREDOC,
+ STR_NEW(tok(), toklen()), /* nd_lit */
+ len, /* nd_nth */
+ lex_lastline); /* nd_orig */
+ nd_set_line(lex_strterm, ruby_sourceline);
+ ripper_flush(parser);
+ return term == '`' ? tXSTRING_BEG : tSTRING_BEG;
+}
+
+static void
+parser_heredoc_restore(struct parser_params *parser, NODE *here)
+{
+ VALUE line;
+
+ lex_strterm = 0;
+ line = here->nd_orig;
+ lex_lastline = line;
+ lex_pbeg = RSTRING_PTR(line);
+ lex_pend = lex_pbeg + RSTRING_LEN(line);
+ lex_p = lex_pbeg + here->nd_nth;
+ heredoc_end = ruby_sourceline;
+ ruby_sourceline = nd_line(here);
+ dispose_string(here->nd_lit);
+ rb_gc_force_recycle((VALUE)here);
+ ripper_flush(parser);
+}
+
+static int
+parser_whole_match_p(struct parser_params *parser,
+ const char *eos, long len, int indent)
+{
+ const char *p = lex_pbeg;
+ long n;
+
+ if (indent) {
+ while (*p && ISSPACE(*p)) p++;
+ }
+ n = lex_pend - (p + len);
+ if (n < 0) return FALSE;
+ if (n > 0 && p[len] != '\n') {
+ if (p[len] != '\r') return FALSE;
+ if (n <= 1 || p[len+1] != '\n') return FALSE;
+ }
+ return strncmp(eos, p, len) == 0;
+}
+
+#define NUM_SUFFIX_R (1<<0)
+#define NUM_SUFFIX_I (1<<1)
+#define NUM_SUFFIX_ALL 3
+
+static int
+parser_number_literal_suffix(struct parser_params *parser, int mask)
+{
+ int c, result = 0;
+ const char *lastp = lex_p;
+
+ while ((c = nextc()) != -1) {
+ if ((mask & NUM_SUFFIX_I) && c == 'i') {
+ result |= (mask & NUM_SUFFIX_I);
+ mask &= ~NUM_SUFFIX_I;
+ /* r after i, rational of complex is disallowed */
+ mask &= ~NUM_SUFFIX_R;
+ continue;
+ }
+ if ((mask & NUM_SUFFIX_R) && c == 'r') {
+ result |= (mask & NUM_SUFFIX_R);
+ mask &= ~NUM_SUFFIX_R;
+ continue;
+ }
+ if (!ISASCII(c) || ISALPHA(c) || c == '_') {
+ lex_p = lastp;
+ return 0;
+ }
+ pushback(c);
+ if (c == '.') {
+ c = peekc_n(1);
+ if (ISDIGIT(c)) {
+ yyerror("unexpected fraction part after numeric literal");
+ lex_p += 2;
+ while (parser_is_identchar()) nextc();
+ }
+ }
+ break;
+ }
+ return result;
+}
+
+static int
+parser_set_number_literal(struct parser_params *parser, VALUE v, int type, int suffix)
+{
+ if (suffix & NUM_SUFFIX_I) {
+ v = rb_complex_raw(INT2FIX(0), v);
+ type = tIMAGINARY;
+ }
+ set_yylval_literal(v);
+ return type;
+}
+
+static int
+parser_set_integer_literal(struct parser_params *parser, VALUE v, int suffix)
+{
+ int type = tINTEGER;
+ if (suffix & NUM_SUFFIX_R) {
+ v = rb_rational_raw1(v);
+ type = tRATIONAL;
+ }
+ return set_number_literal(v, type, suffix);
+}
+
+#ifdef RIPPER
+static void
+ripper_dispatch_heredoc_end(struct parser_params *parser)
+{
+ if (!NIL_P(parser->delayed))
+ ripper_dispatch_delayed_token(parser, tSTRING_CONTENT);
+ lex_goto_eol(parser);
+ ripper_dispatch_ignored_scan_event(parser, tHEREDOC_END);
+}
+
+#define dispatch_heredoc_end() ripper_dispatch_heredoc_end(parser)
+#else
+#define dispatch_heredoc_end() ((void)0)
+#endif
+
+static int
+parser_here_document(struct parser_params *parser, NODE *here)
+{
+ int c, func, indent = 0;
+ const char *eos, *p, *pend;
+ long len;
+ VALUE str = 0;
+ rb_encoding *enc = current_enc;
+
+ eos = RSTRING_PTR(here->nd_lit);
+ len = RSTRING_LEN(here->nd_lit) - 1;
+ indent = (func = *eos++) & STR_FUNC_INDENT;
+
+ if ((c = nextc()) == -1) {
+ error:
+ compile_error(PARSER_ARG "can't find string \"%s\" anywhere before EOF", eos);
+#ifdef RIPPER
+ if (NIL_P(parser->delayed)) {
+ ripper_dispatch_scan_event(parser, tSTRING_CONTENT);
+ }
+ else {
+ if (str) {
+ rb_str_append(parser->delayed, str);
+ }
+ else if ((len = lex_p - parser->tokp) > 0) {
+ if (!(func & STR_FUNC_REGEXP) && rb_enc_asciicompat(enc)) {
+ int cr = ENC_CODERANGE_UNKNOWN;
+ rb_str_coderange_scan_restartable(parser->tokp, lex_p, enc, &cr);
+ if (cr != ENC_CODERANGE_7BIT &&
+ current_enc == rb_usascii_encoding() &&
+ enc != rb_utf8_encoding()) {
+ enc = rb_ascii8bit_encoding();
+ }
+ }
+ rb_enc_str_buf_cat(parser->delayed, parser->tokp, len, enc);
+ }
+ ripper_dispatch_delayed_token(parser, tSTRING_CONTENT);
+ }
+ lex_goto_eol(parser);
+#endif
+ restore:
+ heredoc_restore(lex_strterm);
+ return 0;
+ }
+ if (was_bol() && whole_match_p(eos, len, indent)) {
+ dispatch_heredoc_end();
+ heredoc_restore(lex_strterm);
+ return tSTRING_END;
+ }
+
+ if (!(func & STR_FUNC_EXPAND)) {
+ do {
+ p = RSTRING_PTR(lex_lastline);
+ pend = lex_pend;
+ if (pend > p) {
+ switch (pend[-1]) {
+ case '\n':
+ if (--pend == p || pend[-1] != '\r') {
+ pend++;
+ break;
+ }
+ case '\r':
+ --pend;
+ }
+ }
+ if (str)
+ rb_str_cat(str, p, pend - p);
+ else
+ str = STR_NEW(p, pend - p);
+ if (pend < lex_pend) rb_str_cat(str, "\n", 1);
+ lex_goto_eol(parser);
+ if (nextc() == -1) {
+ if (str) {
+ dispose_string(str);
+ str = 0;
+ }
+ goto error;
+ }
+ } while (!whole_match_p(eos, len, indent));
+ }
+ else {
+ /* int mb = ENC_CODERANGE_7BIT, *mbp = &mb;*/
+ newtok();
+ if (c == '#') {
+ int t = parser_peek_variable_name(parser);
+ if (t) return t;
+ tokadd('#');
+ c = nextc();
+ }
+ do {
+ pushback(c);
+ if ((c = tokadd_string(func, '\n', 0, NULL, &enc)) == -1) {
+ if (parser->eofp) goto error;
+ goto restore;
+ }
+ if (c != '\n') {
+ set_yylval_str(STR_NEW3(tok(), toklen(), enc, func));
+ flush_string_content(enc);
+ return tSTRING_CONTENT;
+ }
+ tokadd(nextc());
+ /* if (mbp && mb == ENC_CODERANGE_UNKNOWN) mbp = 0;*/
+ if ((c = nextc()) == -1) goto error;
+ } while (!whole_match_p(eos, len, indent));
+ str = STR_NEW3(tok(), toklen(), enc, func);
+ }
+ dispatch_heredoc_end();
+ heredoc_restore(lex_strterm);
+ lex_strterm = NEW_STRTERM(-1, 0, 0);
+ set_yylval_str(str);
+ return tSTRING_CONTENT;
+}
+
+#include "lex.c"
+
+static void
+arg_ambiguous_gen(struct parser_params *parser, char c)
+{
+#ifndef RIPPER
+ rb_warningS("ambiguous first argument; put parentheses or a space even after `%c' operator", c);
+#else
+ dispatch1(arg_ambiguous, rb_usascii_str_new(&c, 1));
+#endif
+}
+#define arg_ambiguous(c) (arg_ambiguous_gen(parser, (c)), 1)
+
+static ID
+formal_argument_gen(struct parser_params *parser, ID lhs)
+{
+ switch (id_type(lhs)) {
+ case ID_LOCAL:
+ break;
+#ifndef RIPPER
+ case ID_CONST:
+ yyerror("formal argument cannot be a constant");
+ return 0;
+ case ID_INSTANCE:
+ yyerror("formal argument cannot be an instance variable");
+ return 0;
+ case ID_GLOBAL:
+ yyerror("formal argument cannot be a global variable");
+ return 0;
+ case ID_CLASS:
+ yyerror("formal argument cannot be a class variable");
+ return 0;
+#else
+ default:
+ lhs = dispatch1(param_error, lhs);
+ ripper_error();
+ return 0;
+#endif
+ }
+ shadowing_lvar(lhs);
+ return lhs;
+}
+
+static int
+lvar_defined_gen(struct parser_params *parser, ID id)
+{
+ return (dyna_in_block() && dvar_defined_get(id)) || local_id(id);
+}
+
+/* emacsen -*- hack */
+static long
+parser_encode_length(struct parser_params *parser, const char *name, long len)
+{
+ long nlen;
+
+ if (len > 5 && name[nlen = len - 5] == '-') {
+ if (rb_memcicmp(name + nlen + 1, "unix", 4) == 0)
+ return nlen;
+ }
+ if (len > 4 && name[nlen = len - 4] == '-') {
+ if (rb_memcicmp(name + nlen + 1, "dos", 3) == 0)
+ return nlen;
+ if (rb_memcicmp(name + nlen + 1, "mac", 3) == 0 &&
+ !(len == 8 && rb_memcicmp(name, "utf8-mac", len) == 0))
+ /* exclude UTF8-MAC because the encoding named "UTF8" doesn't exist in Ruby */
+ return nlen;
+ }
+ return len;
+}
+
+static void
+parser_set_encode(struct parser_params *parser, const char *name)
+{
+ int idx = rb_enc_find_index(name);
+ rb_encoding *enc;
+ VALUE excargs[3];
+
+ if (idx < 0) {
+ excargs[1] = rb_sprintf("unknown encoding name: %s", name);
+ error:
+ excargs[0] = rb_eArgError;
+ excargs[2] = rb_make_backtrace();
+ rb_ary_unshift(excargs[2], rb_sprintf("%s:%d", ruby_sourcefile, ruby_sourceline));
+ rb_exc_raise(rb_make_exception(3, excargs));
+ }
+ enc = rb_enc_from_index(idx);
+ if (!rb_enc_asciicompat(enc)) {
+ excargs[1] = rb_sprintf("%s is not ASCII compatible", rb_enc_name(enc));
+ goto error;
+ }
+ parser->enc = enc;
+#ifndef RIPPER
+ if (ruby_debug_lines) {
+ VALUE lines = ruby_debug_lines;
+ long i, n = RARRAY_LEN(lines);
+ for (i = 0; i < n; ++i) {
+ rb_enc_associate_index(RARRAY_AREF(lines, i), idx);
+ }
+ }
+#endif
+}
+
+static int
+comment_at_top(struct parser_params *parser)
+{
+ const char *p = lex_pbeg, *pend = lex_p - 1;
+ if (parser->line_count != (parser->has_shebang ? 2 : 1)) return 0;
+ while (p < pend) {
+ if (!ISSPACE(*p)) return 0;
+ p++;
+ }
+ return 1;
+}
+
+typedef long (*rb_magic_comment_length_t)(struct parser_params *parser, const char *name, long len);
+typedef void (*rb_magic_comment_setter_t)(struct parser_params *parser, const char *name, const char *val);
+
+static void
+magic_comment_encoding(struct parser_params *parser, const char *name, const char *val)
+{
+ if (!comment_at_top(parser)) {
+ return;
+ }
+ parser_set_encode(parser, val);
+}
+
+#ifndef RIPPER
+static int
+parser_get_bool(struct parser_params *parser, const char *name, const char *val)
+{
+ switch (*val) {
+ case 't': case 'T':
+ if (strcasecmp(val, "true") == 0) {
+ return TRUE;
+ }
+ break;
+ case 'f': case 'F':
+ if (strcasecmp(val, "false") == 0) {
+ return FALSE;
+ }
+ break;
+ }
+ rb_compile_warning(ruby_sourcefile, ruby_sourceline, "invalid value for %s: %s", name, val);
+ return -1;
+}
+
+static void
+parser_set_token_info(struct parser_params *parser, const char *name, const char *val)
+{
+ int b = parser_get_bool(parser, name, val);
+ if (b >= 0) parser->parser_token_info_enabled = b;
+}
+
+# if WARN_PAST_SCOPE
+static void
+parser_set_past_scope(struct parser_params *parser, const char *name, const char *val)
+{
+ int b = parser_get_bool(parser, name, val);
+ if (b >= 0) parser->parser_past_scope_enabled = b;
+}
+# endif
+#endif
+
+struct magic_comment {
+ const char *name;
+ rb_magic_comment_setter_t func;
+ rb_magic_comment_length_t length;
+};
+
+static const struct magic_comment magic_comments[] = {
+ {"coding", magic_comment_encoding, parser_encode_length},
+ {"encoding", magic_comment_encoding, parser_encode_length},
+#ifndef RIPPER
+ {"warn_indent", parser_set_token_info},
+# if WARN_PAST_SCOPE
+ {"warn_past_scope", parser_set_past_scope},
+# endif
+#endif
+};
+
+static const char *
+magic_comment_marker(const char *str, long len)
+{
+ long i = 2;
+
+ while (i < len) {
+ switch (str[i]) {
+ case '-':
+ if (str[i-1] == '*' && str[i-2] == '-') {
+ return str + i + 1;
+ }
+ i += 2;
+ break;
+ case '*':
+ if (i + 1 >= len) return 0;
+ if (str[i+1] != '-') {
+ i += 4;
+ }
+ else if (str[i-1] != '-') {
+ i += 2;
+ }
+ else {
+ return str + i + 2;
+ }
+ break;
+ default:
+ i += 3;
+ break;
+ }
+ }
+ return 0;
+}
+
+static int
+parser_magic_comment(struct parser_params *parser, const char *str, long len)
+{
+ VALUE name = 0, val = 0;
+ const char *beg, *end, *vbeg, *vend;
+#define str_copy(_s, _p, _n) ((_s) \
+ ? (void)(rb_str_resize((_s), (_n)), \
+ MEMCPY(RSTRING_PTR(_s), (_p), char, (_n)), (_s)) \
+ : (void)((_s) = STR_NEW((_p), (_n))))
+
+ if (len <= 7) return FALSE;
+ if (!(beg = magic_comment_marker(str, len))) return FALSE;
+ if (!(end = magic_comment_marker(beg, str + len - beg))) return FALSE;
+ str = beg;
+ len = end - beg - 3;
+
+ /* %r"([^\\s\'\":;]+)\\s*:\\s*(\"(?:\\\\.|[^\"])*\"|[^\"\\s;]+)[\\s;]*" */
+ while (len > 0) {
+ const struct magic_comment *p = magic_comments;
+ char *s;
+ int i;
+ long n = 0;
+
+ for (; len > 0 && *str; str++, --len) {
+ switch (*str) {
+ case '\'': case '"': case ':': case ';':
+ continue;
+ }
+ if (!ISSPACE(*str)) break;
+ }
+ for (beg = str; len > 0; str++, --len) {
+ switch (*str) {
+ case '\'': case '"': case ':': case ';':
+ break;
+ default:
+ if (ISSPACE(*str)) break;
+ continue;
+ }
+ break;
+ }
+ for (end = str; len > 0 && ISSPACE(*str); str++, --len);
+ if (!len) break;
+ if (*str != ':') continue;
+
+ do str++; while (--len > 0 && ISSPACE(*str));
+ if (!len) break;
+ if (*str == '"') {
+ for (vbeg = ++str; --len > 0 && *str != '"'; str++) {
+ if (*str == '\\') {
+ --len;
+ ++str;
+ }
+ }
+ vend = str;
+ if (len) {
+ --len;
+ ++str;
+ }
+ }
+ else {
+ for (vbeg = str; len > 0 && *str != '"' && *str != ';' && !ISSPACE(*str); --len, str++);
+ vend = str;
+ }
+ while (len > 0 && (*str == ';' || ISSPACE(*str))) --len, str++;
+
+ n = end - beg;
+ str_copy(name, beg, n);
+ s = RSTRING_PTR(name);
+ for (i = 0; i < n; ++i) {
+ if (s[i] == '-') s[i] = '_';
+ }
+ do {
+ if (STRNCASECMP(p->name, s, n) == 0) {
+ n = vend - vbeg;
+ if (p->length) {
+ n = (*p->length)(parser, vbeg, n);
+ }
+ str_copy(val, vbeg, n);
+ (*p->func)(parser, s, RSTRING_PTR(val));
+ break;
+ }
+ } while (++p < magic_comments + numberof(magic_comments));
+#ifdef RIPPER
+ str_copy(val, vbeg, vend - vbeg);
+ dispatch2(magic_comment, name, val);
+#endif
+ }
+
+ return TRUE;
+}
+
+static void
+set_file_encoding(struct parser_params *parser, const char *str, const char *send)
+{
+ int sep = 0;
+ const char *beg = str;
+ VALUE s;
+
+ for (;;) {
+ if (send - str <= 6) return;
+ switch (str[6]) {
+ case 'C': case 'c': str += 6; continue;
+ case 'O': case 'o': str += 5; continue;
+ case 'D': case 'd': str += 4; continue;
+ case 'I': case 'i': str += 3; continue;
+ case 'N': case 'n': str += 2; continue;
+ case 'G': case 'g': str += 1; continue;
+ case '=': case ':':
+ sep = 1;
+ str += 6;
+ break;
+ default:
+ str += 6;
+ if (ISSPACE(*str)) break;
+ continue;
+ }
+ if (STRNCASECMP(str-6, "coding", 6) == 0) break;
+ }
+ for (;;) {
+ do {
+ if (++str >= send) return;
+ } while (ISSPACE(*str));
+ if (sep) break;
+ if (*str != '=' && *str != ':') return;
+ sep = 1;
+ str++;
+ }
+ beg = str;
+ while ((*str == '-' || *str == '_' || ISALNUM(*str)) && ++str < send);
+ s = rb_str_new(beg, parser_encode_length(parser, beg, str - beg));
+ parser_set_encode(parser, RSTRING_PTR(s));
+ rb_str_resize(s, 0);
+}
+
+static void
+parser_prepare(struct parser_params *parser)
+{
+ int c = nextc();
+ switch (c) {
+ case '#':
+ if (peek('!')) parser->has_shebang = 1;
+ break;
+ case 0xef: /* UTF-8 BOM marker */
+ if (lex_pend - lex_p >= 2 &&
+ (unsigned char)lex_p[0] == 0xbb &&
+ (unsigned char)lex_p[1] == 0xbf) {
+ parser->enc = rb_utf8_encoding();
+ lex_p += 2;
+ lex_pbeg = lex_p;
+ return;
+ }
+ break;
+ case EOF:
+ return;
+ }
+ pushback(c);
+ parser->enc = rb_enc_get(lex_lastline);
+}
+
+#define IS_ARG() IS_lex_state(EXPR_ARG_ANY)
+#define IS_END() IS_lex_state(EXPR_END_ANY)
+#define IS_BEG() IS_lex_state(EXPR_BEG_ANY)
+#define IS_SPCARG(c) (IS_ARG() && space_seen && !ISSPACE(c))
+#define IS_LABEL_POSSIBLE() ((IS_lex_state(EXPR_BEG | EXPR_ENDFN) && !cmd_state) || IS_ARG())
+#define IS_LABEL_SUFFIX(n) (peek_n(':',(n)) && !peek_n(':', (n)+1))
+#define IS_AFTER_OPERATOR() IS_lex_state(EXPR_FNAME | EXPR_DOT)
+
+#ifndef RIPPER
+#define ambiguous_operator(op, syn) ( \
+ rb_warning0("`"op"' after local variable or literal is interpreted as binary operator"), \
+ rb_warning0("even though it seems like "syn""))
+#else
+#define ambiguous_operator(op, syn) dispatch2(operator_ambiguous, ripper_intern(op), rb_str_new_cstr(syn))
+#endif
+#define warn_balanced(op, syn) ((void) \
+ (!IS_lex_state_for(last_state, EXPR_CLASS|EXPR_DOT|EXPR_FNAME|EXPR_ENDFN|EXPR_ENDARG) && \
+ space_seen && !ISSPACE(c) && \
+ (ambiguous_operator(op, syn), 0)))
+
+static VALUE
+parse_rational(struct parser_params *parser, char *str, int len, int seen_point)
+{
+ VALUE v;
+ char *point = &str[seen_point];
+ size_t fraclen = len-seen_point-1;
+ memmove(point, point+1, fraclen+1);
+ v = rb_cstr_to_inum(str, 10, FALSE);
+ return rb_rational_new(v, rb_int_positive_pow(10, fraclen));
+}
+
+static int
+parse_numeric(struct parser_params *parser, int c)
+{
+ int is_float, seen_point, seen_e, nondigit;
+ int suffix;
+
+ is_float = seen_point = seen_e = nondigit = 0;
+ lex_state = EXPR_END;
+ newtok();
+ if (c == '-' || c == '+') {
+ tokadd(c);
+ c = nextc();
+ }
+ if (c == '0') {
+#define no_digits() do {yyerror("numeric literal without digits"); return 0;} while (0)
+ int start = toklen();
+ c = nextc();
+ if (c == 'x' || c == 'X') {
+ /* hexadecimal */
+ c = nextc();
+ if (c != -1 && ISXDIGIT(c)) {
+ do {
+ if (c == '_') {
+ if (nondigit) break;
+ nondigit = c;
+ continue;
+ }
+ if (!ISXDIGIT(c)) break;
+ nondigit = 0;
+ tokadd(c);
+ } while ((c = nextc()) != -1);
+ }
+ pushback(c);
+ tokfix();
+ if (toklen() == start) {
+ no_digits();
+ }
+ else if (nondigit) goto trailing_uc;
+ suffix = number_literal_suffix(NUM_SUFFIX_ALL);
+ return set_integer_literal(rb_cstr_to_inum(tok(), 16, FALSE), suffix);
+ }
+ if (c == 'b' || c == 'B') {
+ /* binary */
+ c = nextc();
+ if (c == '0' || c == '1') {
+ do {
+ if (c == '_') {
+ if (nondigit) break;
+ nondigit = c;
+ continue;
+ }
+ if (c != '0' && c != '1') break;
+ nondigit = 0;
+ tokadd(c);
+ } while ((c = nextc()) != -1);
+ }
+ pushback(c);
+ tokfix();
+ if (toklen() == start) {
+ no_digits();
+ }
+ else if (nondigit) goto trailing_uc;
+ suffix = number_literal_suffix(NUM_SUFFIX_ALL);
+ return set_integer_literal(rb_cstr_to_inum(tok(), 2, FALSE), suffix);
+ }
+ if (c == 'd' || c == 'D') {
+ /* decimal */
+ c = nextc();
+ if (c != -1 && ISDIGIT(c)) {
+ do {
+ if (c == '_') {
+ if (nondigit) break;
+ nondigit = c;
+ continue;
+ }
+ if (!ISDIGIT(c)) break;
+ nondigit = 0;
+ tokadd(c);
+ } while ((c = nextc()) != -1);
+ }
+ pushback(c);
+ tokfix();
+ if (toklen() == start) {
+ no_digits();
+ }
+ else if (nondigit) goto trailing_uc;
+ suffix = number_literal_suffix(NUM_SUFFIX_ALL);
+ return set_integer_literal(rb_cstr_to_inum(tok(), 10, FALSE), suffix);
+ }
+ if (c == '_') {
+ /* 0_0 */
+ goto octal_number;
+ }
+ if (c == 'o' || c == 'O') {
+ /* prefixed octal */
+ c = nextc();
+ if (c == -1 || c == '_' || !ISDIGIT(c)) {
+ no_digits();
+ }
+ }
+ if (c >= '0' && c <= '7') {
+ /* octal */
+ octal_number:
+ do {
+ if (c == '_') {
+ if (nondigit) break;
+ nondigit = c;
+ continue;
+ }
+ if (c < '0' || c > '9') break;
+ if (c > '7') goto invalid_octal;
+ nondigit = 0;
+ tokadd(c);
+ } while ((c = nextc()) != -1);
+ if (toklen() > start) {
+ pushback(c);
+ tokfix();
+ if (nondigit) goto trailing_uc;
+ suffix = number_literal_suffix(NUM_SUFFIX_ALL);
+ return set_integer_literal(rb_cstr_to_inum(tok(), 8, FALSE), suffix);
+ }
+ if (nondigit) {
+ pushback(c);
+ goto trailing_uc;
+ }
+ }
+ if (c > '7' && c <= '9') {
+ invalid_octal:
+ yyerror("Invalid octal digit");
+ }
+ else if (c == '.' || c == 'e' || c == 'E') {
+ tokadd('0');
+ }
+ else {
+ pushback(c);
+ suffix = number_literal_suffix(NUM_SUFFIX_ALL);
+ return set_integer_literal(INT2FIX(0), suffix);
+ }
+ }
+
+ for (;;) {
+ switch (c) {
+ case '0': case '1': case '2': case '3': case '4':
+ case '5': case '6': case '7': case '8': case '9':
+ nondigit = 0;
+ tokadd(c);
+ break;
+
+ case '.':
+ if (nondigit) goto trailing_uc;
+ if (seen_point || seen_e) {
+ goto decode_num;
+ }
+ else {
+ int c0 = nextc();
+ if (c0 == -1 || !ISDIGIT(c0)) {
+ pushback(c0);
+ goto decode_num;
+ }
+ c = c0;
+ }
+ seen_point = toklen();
+ tokadd('.');
+ tokadd(c);
+ is_float++;
+ nondigit = 0;
+ break;
+
+ case 'e':
+ case 'E':
+ if (nondigit) {
+ pushback(c);
+ c = nondigit;
+ goto decode_num;
+ }
+ if (seen_e) {
+ goto decode_num;
+ }
+ nondigit = c;
+ c = nextc();
+ if (c != '-' && c != '+' && !ISDIGIT(c)) {
+ pushback(c);
+ nondigit = 0;
+ goto decode_num;
+ }
+ tokadd(nondigit);
+ seen_e++;
+ is_float++;
+ tokadd(c);
+ nondigit = (c == '-' || c == '+') ? c : 0;
+ break;
+
+ case '_': /* `_' in number just ignored */
+ if (nondigit) goto decode_num;
+ nondigit = c;
+ break;
+
+ default:
+ goto decode_num;
+ }
+ c = nextc();
+ }
+
+ decode_num:
+ pushback(c);
+ if (nondigit) {
+ char tmp[30];
+ trailing_uc:
+ snprintf(tmp, sizeof(tmp), "trailing `%c' in number", nondigit);
+ yyerror(tmp);
+ }
+ tokfix();
+ if (is_float) {
+ int type = tFLOAT;
+ VALUE v;
+
+ suffix = number_literal_suffix(seen_e ? NUM_SUFFIX_I : NUM_SUFFIX_ALL);
+ if (suffix & NUM_SUFFIX_R) {
+ type = tRATIONAL;
+ v = parse_rational(parser, tok(), toklen(), seen_point);
+ }
+ else {
+ double d = strtod(tok(), 0);
+ if (errno == ERANGE) {
+ rb_warningS("Float %s out of range", tok());
+ errno = 0;
+ }
+ v = DBL2NUM(d);
+ }
+ return set_number_literal(v, type, suffix);
+ }
+ suffix = number_literal_suffix(NUM_SUFFIX_ALL);
+ return set_integer_literal(rb_cstr_to_inum(tok(), 10, FALSE), suffix);
+}
+
+static int
+parse_qmark(struct parser_params *parser)
+{
+ rb_encoding *enc;
+ register int c;
+
+ if (IS_END()) {
+ lex_state = EXPR_VALUE;
+ return '?';
+ }
+ c = nextc();
+ if (c == -1) {
+ compile_error(PARSER_ARG "incomplete character syntax");
+ return 0;
+ }
+ if (rb_enc_isspace(c, current_enc)) {
+ if (!IS_ARG()) {
+ int c2 = 0;
+ switch (c) {
+ case ' ':
+ c2 = 's';
+ break;
+ case '\n':
+ c2 = 'n';
+ break;
+ case '\t':
+ c2 = 't';
+ break;
+ case '\v':
+ c2 = 'v';
+ break;
+ case '\r':
+ c2 = 'r';
+ break;
+ case '\f':
+ c2 = 'f';
+ break;
+ }
+ if (c2) {
+ rb_warnI("invalid character syntax; use ?\\%c", c2);
+ }
+ }
+ ternary:
+ pushback(c);
+ lex_state = EXPR_VALUE;
+ return '?';
+ }
+ newtok();
+ enc = current_enc;
+ if (!parser_isascii()) {
+ if (tokadd_mbchar(c) == -1) return 0;
+ }
+ else if ((rb_enc_isalnum(c, current_enc) || c == '_') &&
+ lex_p < lex_pend && is_identchar(lex_p, lex_pend, current_enc)) {
+ goto ternary;
+ }
+ else if (c == '\\') {
+ if (peek('u')) {
+ nextc();
+ c = parser_tokadd_utf8(parser, &enc, 0, 0, 0);
+ if (0x80 <= c) {
+ tokaddmbc(c, enc);
+ }
+ else {
+ tokadd(c);
+ }
+ }
+ else if (!lex_eol_p() && !(c = *lex_p, ISASCII(c))) {
+ nextc();
+ if (tokadd_mbchar(c) == -1) return 0;
+ }
+ else {
+ c = read_escape(0, &enc);
+ tokadd(c);
+ }
+ }
+ else {
+ tokadd(c);
+ }
+ tokfix();
+ set_yylval_str(STR_NEW3(tok(), toklen(), enc, 0));
+ lex_state = EXPR_END;
+ return tCHAR;
+}
+
+static int
+parse_percent(struct parser_params *parser, const int space_seen, const enum lex_state_e last_state)
+{
+ register int c;
+
+ if (IS_lex_state(EXPR_BEG_ANY)) {
+ int term;
+ int paren;
+
+ c = nextc();
+ quotation:
+ if (c == -1 || !ISALNUM(c)) {
+ term = c;
+ c = 'Q';
+ }
+ else {
+ term = nextc();
+ if (rb_enc_isalnum(term, current_enc) || !parser_isascii()) {
+ yyerror("unknown type of %string");
+ return 0;
+ }
+ }
+ if (c == -1 || term == -1) {
+ compile_error(PARSER_ARG "unterminated quoted string meets end of file");
+ return 0;
+ }
+ paren = term;
+ if (term == '(') term = ')';
+ else if (term == '[') term = ']';
+ else if (term == '{') term = '}';
+ else if (term == '<') term = '>';
+ else paren = 0;
+
+ switch (c) {
+ case 'Q':
+ lex_strterm = NEW_STRTERM(str_dquote, term, paren);
+ return tSTRING_BEG;
+
+ case 'q':
+ lex_strterm = NEW_STRTERM(str_squote, term, paren);
+ return tSTRING_BEG;
+
+ case 'W':
+ lex_strterm = NEW_STRTERM(str_dword, term, paren);
+ do {c = nextc();} while (ISSPACE(c));
+ pushback(c);
+ return tWORDS_BEG;
+
+ case 'w':
+ lex_strterm = NEW_STRTERM(str_sword, term, paren);
+ do {c = nextc();} while (ISSPACE(c));
+ pushback(c);
+ return tQWORDS_BEG;
+
+ case 'I':
+ lex_strterm = NEW_STRTERM(str_dword, term, paren);
+ do {c = nextc();} while (ISSPACE(c));
+ pushback(c);
+ return tSYMBOLS_BEG;
+
+ case 'i':
+ lex_strterm = NEW_STRTERM(str_sword, term, paren);
+ do {c = nextc();} while (ISSPACE(c));
+ pushback(c);
+ return tQSYMBOLS_BEG;
+
+ case 'x':
+ lex_strterm = NEW_STRTERM(str_xquote, term, paren);
+ return tXSTRING_BEG;
+
+ case 'r':
+ lex_strterm = NEW_STRTERM(str_regexp, term, paren);
+ return tREGEXP_BEG;
+
+ case 's':
+ lex_strterm = NEW_STRTERM(str_ssym, term, paren);
+ lex_state = EXPR_FNAME;
+ return tSYMBEG;
+
+ default:
+ yyerror("unknown type of %string");
+ return 0;
+ }
+ }
+ if ((c = nextc()) == '=') {
+ set_yylval_id('%');
+ lex_state = EXPR_BEG;
+ return tOP_ASGN;
+ }
+ if (IS_SPCARG(c)) {
+ goto quotation;
+ }
+ lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG;
+ pushback(c);
+ warn_balanced("%%", "string literal");
+ return '%';
+}
+
+static int
+tokadd_ident(struct parser_params *parser, int c)
+{
+ do {
+ if (tokadd_mbchar(c) == -1) return -1;
+ c = nextc();
+ } while (parser_is_identchar());
+ pushback(c);
+ return 0;
+}
+
+static void
+tokenize_ident(struct parser_params *parser, const enum lex_state_e last_state)
+{
+ ID ident = TOK_INTERN();
+
+ set_yylval_name(ident);
+ if (!IS_lex_state_for(last_state, EXPR_DOT|EXPR_FNAME) &&
+ is_local_id(ident) && lvar_defined(ident)) {
+ lex_state = EXPR_END;
+ }
+}
+
+static int
+parse_numvar(struct parser_params *parser)
+{
+ size_t len;
+ int overflow;
+ unsigned long n = ruby_scan_digits(tok()+1, toklen()-1, 10, &len, &overflow);
+ const unsigned long nth_ref_max =
+ (FIXNUM_MAX / 2 < INT_MAX) ? FIXNUM_MAX / 2 : INT_MAX;
+ /* NTH_REF is left-shifted to be ORed with back-ref flag and
+ * turned into a Fixnum, in compile.c */
+
+ if (overflow || n > nth_ref_max) {
+ /* compile_error()? */
+ rb_warnS("`%s' is too big for a number variable, always nil", tok());
+ return 0; /* $0 is $PROGRAM_NAME, not NTH_REF */
+ }
+ else {
+ return (int)n;
+ }
+}
+
+static int
+parse_gvar(struct parser_params *parser, const enum lex_state_e last_state)
+{
+ register int c;
+
+ lex_state = EXPR_END;
+ newtok();
+ c = nextc();
+ switch (c) {
+ case '_': /* $_: last read line string */
+ c = nextc();
+ if (parser_is_identchar()) {
+ tokadd('$');
+ tokadd('_');
+ break;
+ }
+ pushback(c);
+ c = '_';
+ /* fall through */
+ case '~': /* $~: match-data */
+ case '*': /* $*: argv */
+ case '$': /* $$: pid */
+ case '?': /* $?: last status */
+ case '!': /* $!: error string */
+ case '@': /* $@: error position */
+ case '/': /* $/: input record separator */
+ case '\\': /* $\: output record separator */
+ case ';': /* $;: field separator */
+ case ',': /* $,: output field separator */
+ case '.': /* $.: last read line number */
+ case '=': /* $=: ignorecase */
+ case ':': /* $:: load path */
+ case '<': /* $<: reading filename */
+ case '>': /* $>: default output handle */
+ case '\"': /* $": already loaded files */
+ tokadd('$');
+ tokadd(c);
+ goto gvar;
+
+ case '-':
+ tokadd('$');
+ tokadd(c);
+ c = nextc();
+ if (parser_is_identchar()) {
+ if (tokadd_mbchar(c) == -1) return 0;
+ }
+ else {
+ pushback(c);
+ pushback('-');
+ return '$';
+ }
+ gvar:
+ set_yylval_name(TOK_INTERN());
+ return tGVAR;
+
+ case '&': /* $&: last match */
+ case '`': /* $`: string before last match */
+ case '\'': /* $': string after last match */
+ case '+': /* $+: string matches last paren. */
+ if (IS_lex_state_for(last_state, EXPR_FNAME)) {
+ tokadd('$');
+ tokadd(c);
+ goto gvar;
+ }
+ set_yylval_node(NEW_BACK_REF(c));
+ return tBACK_REF;
+
+ case '1': case '2': case '3':
+ case '4': case '5': case '6':
+ case '7': case '8': case '9':
+ tokadd('$');
+ do {
+ tokadd(c);
+ c = nextc();
+ } while (c != -1 && ISDIGIT(c));
+ pushback(c);
+ if (IS_lex_state_for(last_state, EXPR_FNAME)) goto gvar;
+ tokfix();
+ set_yylval_node(NEW_NTH_REF(parse_numvar(parser)));
+ return tNTH_REF;
+
+ default:
+ if (!parser_is_identchar()) {
+ pushback(c);
+ compile_error(PARSER_ARG "`$%c' is not allowed as a global variable name", c);
+ return 0;
+ }
+ case '0':
+ tokadd('$');
+ }
+
+ if (tokadd_ident(parser, c)) return 0;
+ lex_state = EXPR_END;
+ tokenize_ident(parser, last_state);
+ return tGVAR;
+}
+
+static int
+parse_atmark(struct parser_params *parser, const enum lex_state_e last_state)
+{
+ int result = tIVAR;
+ register int c = nextc();
+
+ newtok();
+ tokadd('@');
+ if (c == '@') {
+ result = tCVAR;
+ tokadd('@');
+ c = nextc();
+ }
+ if (c == -1 || ISSPACE(c)) {
+ if (result == tIVAR) {
+ compile_error(PARSER_ARG "`@' without identifiers is not allowed as an instance variable name");
+ }
+ else {
+ compile_error(PARSER_ARG "`@@' without identifiers is not allowed as a class variable name");
+ }
+ return 0;
+ }
+ else if (ISDIGIT(c) || !parser_is_identchar()) {
+ pushback(c);
+ if (result == tIVAR) {
+ compile_error(PARSER_ARG "`@%c' is not allowed as an instance variable name", c);
+ }
+ else {
+ compile_error(PARSER_ARG "`@@%c' is not allowed as a class variable name", c);
+ }
+ return 0;
+ }
+
+ if (tokadd_ident(parser, c)) return 0;
+ lex_state = EXPR_END;
+ tokenize_ident(parser, last_state);
+ return result;
+}
+
+static int
+parse_ident(struct parser_params *parser, int c, int cmd_state)
+{
+ int result = 0;
+ int mb = ENC_CODERANGE_7BIT;
+ const enum lex_state_e last_state = lex_state;
+
+ do {
+ if (!ISASCII(c)) mb = ENC_CODERANGE_UNKNOWN;
+ if (tokadd_mbchar(c) == -1) return 0;
+ c = nextc();
+ } while (parser_is_identchar());
+ if ((c == '!' || c == '?') && !peek('=')) {
+ tokadd(c);
+ }
+ else {
+ pushback(c);
+ }
+ tokfix();
+
+ if (toklast() == '!' || toklast() == '?') {
+ result = tFID;
+ }
+ else {
+ if (IS_lex_state(EXPR_FNAME)) {
+ register int c = nextc();
+ if (c == '=' && !peek('~') && !peek('>') &&
+ (!peek('=') || (peek_n('>', 1)))) {
+ result = tIDENTIFIER;
+ tokadd(c);
+ tokfix();
+ }
+ else {
+ pushback(c);
+ }
+ }
+ if (result == 0 && ISUPPER(tok()[0])) {
+ result = tCONSTANT;
+ }
+ else {
+ result = tIDENTIFIER;
+ }
+ }
+
+ if (IS_LABEL_POSSIBLE()) {
+ if (IS_LABEL_SUFFIX(0)) {
+ lex_state = EXPR_LABELARG;
+ nextc();
+ set_yylval_name(TOK_INTERN());
+ return tLABEL;
+ }
+ }
+ if (mb == ENC_CODERANGE_7BIT && !IS_lex_state(EXPR_DOT)) {
+ const struct kwtable *kw;
+
+ /* See if it is a reserved word. */
+ kw = rb_reserved_word(tok(), toklen());
+ if (kw) {
+ enum lex_state_e state = lex_state;
+ lex_state = kw->state;
+ if (IS_lex_state_for(state, EXPR_FNAME)) {
+ set_yylval_name(rb_intern(kw->name));
+ return kw->id[0];
+ }
+ if (IS_lex_state(EXPR_BEG)) {
+ command_start = TRUE;
+ }
+ if (kw->id[0] == keyword_do) {
+ if (lpar_beg && lpar_beg == paren_nest) {
+ lpar_beg = 0;
+ --paren_nest;
+ return keyword_do_LAMBDA;
+ }
+ if (COND_P()) return keyword_do_cond;
+ if (CMDARG_P() && !IS_lex_state_for(state, EXPR_CMDARG))
+ return keyword_do_block;
+ if (IS_lex_state_for(state, (EXPR_BEG | EXPR_ENDARG)))
+ return keyword_do_block;
+ return keyword_do;
+ }
+ if (IS_lex_state_for(state, (EXPR_BEG | EXPR_VALUE | EXPR_LABELARG)))
+ return kw->id[0];
+ else {
+ if (kw->id[0] != kw->id[1])
+ lex_state = EXPR_BEG;
+ return kw->id[1];
+ }
+ }
+ }
+
+ if (IS_lex_state(EXPR_BEG_ANY | EXPR_ARG_ANY | EXPR_DOT)) {
+ if (cmd_state) {
+ lex_state = EXPR_CMDARG;
+ }
+ else {
+ lex_state = EXPR_ARG;
+ }
+ }
+ else if (lex_state == EXPR_FNAME) {
+ lex_state = EXPR_ENDFN;
+ }
+ else {
+ lex_state = EXPR_END;
+ }
+
+ tokenize_ident(parser, last_state);
+ return result;
+}
+
+static int
+parser_yylex(struct parser_params *parser)
+{
+ register int c;
+ int space_seen = 0;
+ int cmd_state;
+ enum lex_state_e last_state;
+#ifdef RIPPER
+ int fallthru = FALSE;
+#endif
+
+ if (lex_strterm) {
+ int token;
+ if (nd_type(lex_strterm) == NODE_HEREDOC) {
+ token = here_document(lex_strterm);
+ if (token == tSTRING_END) {
+ lex_strterm = 0;
+ lex_state = EXPR_END;
+ }
+ }
+ else {
+ token = parse_string(lex_strterm);
+ if (token == tSTRING_END && (peek_n('\'', -1) || peek_n('"', -1))) {
+ if (((IS_lex_state(EXPR_BEG | EXPR_ENDFN) && !COND_P()) || IS_ARG()) &&
+ IS_LABEL_SUFFIX(0)) {
+ nextc();
+ token = tLABEL_END;
+ }
+ }
+ if (token == tSTRING_END || token == tREGEXP_END || token == tLABEL_END) {
+ rb_gc_force_recycle((VALUE)lex_strterm);
+ lex_strterm = 0;
+ lex_state = token == tLABEL_END ? EXPR_LABELARG : EXPR_END;
+ }
+ }
+ return token;
+ }
+ cmd_state = command_start;
+ command_start = FALSE;
+ retry:
+ last_state = lex_state;
+ switch (c = nextc()) {
+ case '\0': /* NUL */
+ case '\004': /* ^D */
+ case '\032': /* ^Z */
+ case -1: /* end of script. */
+ return 0;
+
+ /* white spaces */
+ case ' ': case '\t': case '\f': case '\r':
+ case '\13': /* '\v' */
+ space_seen = 1;
+#ifdef RIPPER
+ while ((c = nextc())) {
+ switch (c) {
+ case ' ': case '\t': case '\f': case '\r':
+ case '\13': /* '\v' */
+ break;
+ default:
+ goto outofloop;
+ }
+ }
+ outofloop:
+ pushback(c);
+ ripper_dispatch_scan_event(parser, tSP);
+#endif
+ goto retry;
+
+ case '#': /* it's a comment */
+ /* no magic_comment in shebang line */
+ if (!parser_magic_comment(parser, lex_p, lex_pend - lex_p)) {
+ if (comment_at_top(parser)) {
+ set_file_encoding(parser, lex_p, lex_pend);
+ }
+ }
+ lex_p = lex_pend;
+#ifdef RIPPER
+ ripper_dispatch_scan_event(parser, tCOMMENT);
+ fallthru = TRUE;
+#endif
+ /* fall through */
+ case '\n':
+ if (IS_lex_state(EXPR_BEG | EXPR_VALUE | EXPR_CLASS | EXPR_FNAME | EXPR_DOT | EXPR_LABELARG)) {
+#ifdef RIPPER
+ if (!fallthru) {
+ ripper_dispatch_scan_event(parser, tIGNORED_NL);
+ }
+ fallthru = FALSE;
+#endif
+ if (IS_lex_state(EXPR_LABELARG) && parser->parser_in_kwarg) {
+ goto normal_newline;
+ }
+ goto retry;
+ }
+ while ((c = nextc())) {
+ switch (c) {
+ case ' ': case '\t': case '\f': case '\r':
+ case '\13': /* '\v' */
+ space_seen = 1;
+ break;
+ case '.': {
+#ifdef RIPPER
+ ripper_dispatch_delayed_token(parser, tIGNORED_NL);
+#endif
+ if ((c = nextc()) != '.') {
+ pushback(c);
+ pushback('.');
+#ifdef RIPPER
+ ripper_dispatch_scan_event(parser, tSP);
+#endif
+ goto retry;
+ }
+ }
+ default:
+ --ruby_sourceline;
+ lex_nextline = lex_lastline;
+ case -1: /* EOF no decrement*/
+ lex_goto_eol(parser);
+#ifdef RIPPER
+ if (c != -1) {
+ parser->tokp = lex_p;
+ }
+#endif
+ goto normal_newline;
+ }
+ }
+ normal_newline:
+ command_start = TRUE;
+ lex_state = EXPR_BEG;
+ return '\n';
+
+ case '*':
+ if ((c = nextc()) == '*') {
+ if ((c = nextc()) == '=') {
+ set_yylval_id(tPOW);
+ lex_state = EXPR_BEG;
+ return tOP_ASGN;
+ }
+ pushback(c);
+ if (IS_SPCARG(c)) {
+ rb_warning0("`**' interpreted as argument prefix");
+ c = tDSTAR;
+ }
+ else if (IS_BEG()) {
+ c = tDSTAR;
+ }
+ else {
+ warn_balanced("**", "argument prefix");
+ c = tPOW;
+ }
+ }
+ else {
+ if (c == '=') {
+ set_yylval_id('*');
+ lex_state = EXPR_BEG;
+ return tOP_ASGN;
+ }
+ pushback(c);
+ if (IS_SPCARG(c)) {
+ rb_warning0("`*' interpreted as argument prefix");
+ c = tSTAR;
+ }
+ else if (IS_BEG()) {
+ c = tSTAR;
+ }
+ else {
+ warn_balanced("*", "argument prefix");
+ c = '*';
+ }
+ }
+ lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG;
+ return c;
+
+ case '!':
+ c = nextc();
+ if (IS_AFTER_OPERATOR()) {
+ lex_state = EXPR_ARG;
+ if (c == '@') {
+ return '!';
+ }
+ }
+ else {
+ lex_state = EXPR_BEG;
+ }
+ if (c == '=') {
+ return tNEQ;
+ }
+ if (c == '~') {
+ return tNMATCH;
+ }
+ pushback(c);
+ return '!';
+
+ case '=':
+ if (was_bol()) {
+ /* skip embedded rd document */
+ if (strncmp(lex_p, "begin", 5) == 0 && ISSPACE(lex_p[5])) {
+#ifdef RIPPER
+ int first_p = TRUE;
+
+ lex_goto_eol(parser);
+ ripper_dispatch_scan_event(parser, tEMBDOC_BEG);
+#endif
+ for (;;) {
+ lex_goto_eol(parser);
+#ifdef RIPPER
+ if (!first_p) {
+ ripper_dispatch_scan_event(parser, tEMBDOC);
+ }
+ first_p = FALSE;
+#endif
+ c = nextc();
+ if (c == -1) {
+ compile_error(PARSER_ARG "embedded document meets end of file");
+ return 0;
+ }
+ if (c != '=') continue;
+ if (strncmp(lex_p, "end", 3) == 0 &&
+ (lex_p + 3 == lex_pend || ISSPACE(lex_p[3]))) {
+ break;
+ }
+ }
+ lex_goto_eol(parser);
+#ifdef RIPPER
+ ripper_dispatch_scan_event(parser, tEMBDOC_END);
+#endif
+ goto retry;
+ }
+ }
+
+ lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG;
+ if ((c = nextc()) == '=') {
+ if ((c = nextc()) == '=') {
+ return tEQQ;
+ }
+ pushback(c);
+ return tEQ;
+ }
+ if (c == '~') {
+ return tMATCH;
+ }
+ else if (c == '>') {
+ return tASSOC;
+ }
+ pushback(c);
+ return '=';
+
+ case '<':
+ last_state = lex_state;
+ c = nextc();
+ if (c == '<' &&
+ !IS_lex_state(EXPR_DOT | EXPR_CLASS) &&
+ !IS_END() &&
+ (!IS_ARG() || space_seen)) {
+ int token = heredoc_identifier();
+ if (token) return token;
+ }
+ if (IS_AFTER_OPERATOR()) {
+ lex_state = EXPR_ARG;
+ }
+ else {
+ if (IS_lex_state(EXPR_CLASS))
+ command_start = TRUE;
+ lex_state = EXPR_BEG;
+ }
+ if (c == '=') {
+ if ((c = nextc()) == '>') {
+ return tCMP;
+ }
+ pushback(c);
+ return tLEQ;
+ }
+ if (c == '<') {
+ if ((c = nextc()) == '=') {
+ set_yylval_id(tLSHFT);
+ lex_state = EXPR_BEG;
+ return tOP_ASGN;
+ }
+ pushback(c);
+ warn_balanced("<<", "here document");
+ return tLSHFT;
+ }
+ pushback(c);
+ return '<';
+
+ case '>':
+ lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG;
+ if ((c = nextc()) == '=') {
+ return tGEQ;
+ }
+ if (c == '>') {
+ if ((c = nextc()) == '=') {
+ set_yylval_id(tRSHFT);
+ lex_state = EXPR_BEG;
+ return tOP_ASGN;
+ }
+ pushback(c);
+ return tRSHFT;
+ }
+ pushback(c);
+ return '>';
+
+ case '"':
+ lex_strterm = NEW_STRTERM(str_dquote, '"', 0);
+ return tSTRING_BEG;
+
+ case '`':
+ if (IS_lex_state(EXPR_FNAME)) {
+ lex_state = EXPR_ENDFN;
+ return c;
+ }
+ if (IS_lex_state(EXPR_DOT)) {
+ if (cmd_state)
+ lex_state = EXPR_CMDARG;
+ else
+ lex_state = EXPR_ARG;
+ return c;
+ }
+ lex_strterm = NEW_STRTERM(str_xquote, '`', 0);
+ return tXSTRING_BEG;
+
+ case '\'':
+ lex_strterm = NEW_STRTERM(str_squote, '\'', 0);
+ return tSTRING_BEG;
+
+ case '?':
+ return parse_qmark(parser);
+
+ case '&':
+ if ((c = nextc()) == '&') {
+ lex_state = EXPR_BEG;
+ if ((c = nextc()) == '=') {
+ set_yylval_id(tANDOP);
+ lex_state = EXPR_BEG;
+ return tOP_ASGN;
+ }
+ pushback(c);
+ return tANDOP;
+ }
+ else if (c == '=') {
+ set_yylval_id('&');
+ lex_state = EXPR_BEG;
+ return tOP_ASGN;
+ }
+ pushback(c);
+ if (IS_SPCARG(c)) {
+ rb_warning0("`&' interpreted as argument prefix");
+ c = tAMPER;
+ }
+ else if (IS_BEG()) {
+ c = tAMPER;
+ }
+ else {
+ warn_balanced("&", "argument prefix");
+ c = '&';
+ }
+ lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG;
+ return c;
+
+ case '|':
+ if ((c = nextc()) == '|') {
+ lex_state = EXPR_BEG;
+ if ((c = nextc()) == '=') {
+ set_yylval_id(tOROP);
+ lex_state = EXPR_BEG;
+ return tOP_ASGN;
+ }
+ pushback(c);
+ return tOROP;
+ }
+ if (c == '=') {
+ set_yylval_id('|');
+ lex_state = EXPR_BEG;
+ return tOP_ASGN;
+ }
+ lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG;
+ pushback(c);
+ return '|';
+
+ case '+':
+ c = nextc();
+ if (IS_AFTER_OPERATOR()) {
+ lex_state = EXPR_ARG;
+ if (c == '@') {
+ return tUPLUS;
+ }
+ pushback(c);
+ return '+';
+ }
+ if (c == '=') {
+ set_yylval_id('+');
+ lex_state = EXPR_BEG;
+ return tOP_ASGN;
+ }
+ if (IS_BEG() || (IS_SPCARG(c) && arg_ambiguous('+'))) {
+ lex_state = EXPR_BEG;
+ pushback(c);
+ if (c != -1 && ISDIGIT(c)) {
+ return parse_numeric(parser, '+');
+ }
+ return tUPLUS;
+ }
+ lex_state = EXPR_BEG;
+ pushback(c);
+ warn_balanced("+", "unary operator");
+ return '+';
+
+ case '-':
+ c = nextc();
+ if (IS_AFTER_OPERATOR()) {
+ lex_state = EXPR_ARG;
+ if (c == '@') {
+ return tUMINUS;
+ }
+ pushback(c);
+ return '-';
+ }
+ if (c == '=') {
+ set_yylval_id('-');
+ lex_state = EXPR_BEG;
+ return tOP_ASGN;
+ }
+ if (c == '>') {
+ lex_state = EXPR_ENDFN;
+ return tLAMBDA;
+ }
+ if (IS_BEG() || (IS_SPCARG(c) && arg_ambiguous('-'))) {
+ lex_state = EXPR_BEG;
+ pushback(c);
+ if (c != -1 && ISDIGIT(c)) {
+ return tUMINUS_NUM;
+ }
+ return tUMINUS;
+ }
+ lex_state = EXPR_BEG;
+ pushback(c);
+ warn_balanced("-", "unary operator");
+ return '-';
+
+ case '.':
+ lex_state = EXPR_BEG;
+ if ((c = nextc()) == '.') {
+ if ((c = nextc()) == '.') {
+ return tDOT3;
+ }
+ pushback(c);
+ return tDOT2;
+ }
+ pushback(c);
+ if (c != -1 && ISDIGIT(c)) {
+ yyerror("no .<digit> floating literal anymore; put 0 before dot");
+ }
+ lex_state = EXPR_DOT;
+ return '.';
+
+ case '0': case '1': case '2': case '3': case '4':
+ case '5': case '6': case '7': case '8': case '9':
+ return parse_numeric(parser, c);
+
+ case ')':
+ case ']':
+ paren_nest--;
+ case '}':
+ COND_LEXPOP();
+ CMDARG_LEXPOP();
+ if (c == ')')
+ lex_state = EXPR_ENDFN;
+ else
+ lex_state = EXPR_ENDARG;
+ if (c == '}') {
+ if (!brace_nest--) c = tSTRING_DEND;
+ }
+ return c;
+
+ case ':':
+ c = nextc();
+ if (c == ':') {
+ if (IS_BEG() || IS_lex_state(EXPR_CLASS) || IS_SPCARG(-1)) {
+ lex_state = EXPR_BEG;
+ return tCOLON3;
+ }
+ lex_state = EXPR_DOT;
+ return tCOLON2;
+ }
+ if (IS_END() || ISSPACE(c)) {
+ pushback(c);
+ warn_balanced(":", "symbol literal");
+ lex_state = EXPR_BEG;
+ return ':';
+ }
+ switch (c) {
+ case '\'':
+ lex_strterm = NEW_STRTERM(str_ssym, c, 0);
+ break;
+ case '"':
+ lex_strterm = NEW_STRTERM(str_dsym, c, 0);
+ break;
+ default:
+ pushback(c);
+ break;
+ }
+ lex_state = EXPR_FNAME;
+ return tSYMBEG;
+
+ case '/':
+ if (IS_lex_state(EXPR_BEG_ANY)) {
+ lex_strterm = NEW_STRTERM(str_regexp, '/', 0);
+ return tREGEXP_BEG;
+ }
+ if ((c = nextc()) == '=') {
+ set_yylval_id('/');
+ lex_state = EXPR_BEG;
+ return tOP_ASGN;
+ }
+ pushback(c);
+ if (IS_SPCARG(c)) {
+ (void)arg_ambiguous('/');
+ lex_strterm = NEW_STRTERM(str_regexp, '/', 0);
+ return tREGEXP_BEG;
+ }
+ lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG;
+ warn_balanced("/", "regexp literal");
+ return '/';
+
+ case '^':
+ if ((c = nextc()) == '=') {
+ set_yylval_id('^');
+ lex_state = EXPR_BEG;
+ return tOP_ASGN;
+ }
+ lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG;
+ pushback(c);
+ return '^';
+
+ case ';':
+ lex_state = EXPR_BEG;
+ command_start = TRUE;
+ return ';';
+
+ case ',':
+ lex_state = EXPR_BEG;
+ return ',';
+
+ case '~':
+ if (IS_AFTER_OPERATOR()) {
+ if ((c = nextc()) != '@') {
+ pushback(c);
+ }
+ lex_state = EXPR_ARG;
+ }
+ else {
+ lex_state = EXPR_BEG;
+ }
+ return '~';
+
+ case '(':
+ if (IS_BEG()) {
+ c = tLPAREN;
+ }
+ else if (IS_SPCARG(-1)) {
+ c = tLPAREN_ARG;
+ }
+ paren_nest++;
+ COND_PUSH(0);
+ CMDARG_PUSH(0);
+ lex_state = EXPR_BEG;
+ return c;
+
+ case '[':
+ paren_nest++;
+ if (IS_AFTER_OPERATOR()) {
+ lex_state = EXPR_ARG;
+ if ((c = nextc()) == ']') {
+ if ((c = nextc()) == '=') {
+ return tASET;
+ }
+ pushback(c);
+ return tAREF;
+ }
+ pushback(c);
+ return '[';
+ }
+ else if (IS_BEG()) {
+ c = tLBRACK;
+ }
+ else if (IS_ARG() && space_seen) {
+ c = tLBRACK;
+ }
+ lex_state = EXPR_BEG;
+ COND_PUSH(0);
+ CMDARG_PUSH(0);
+ return c;
+
+ case '{':
+ ++brace_nest;
+ if (lpar_beg && lpar_beg == paren_nest) {
+ lex_state = EXPR_BEG;
+ lpar_beg = 0;
+ --paren_nest;
+ COND_PUSH(0);
+ CMDARG_PUSH(0);
+ return tLAMBEG;
+ }
+ if (IS_ARG() || IS_lex_state(EXPR_END | EXPR_ENDFN))
+ c = '{'; /* block (primary) */
+ else if (IS_lex_state(EXPR_ENDARG))
+ c = tLBRACE_ARG; /* block (expr) */
+ else
+ c = tLBRACE; /* hash */
+ COND_PUSH(0);
+ CMDARG_PUSH(0);
+ lex_state = EXPR_BEG;
+ if (c != tLBRACE) command_start = TRUE;
+ return c;
+
+ case '\\':
+ c = nextc();
+ if (c == '\n') {
+ space_seen = 1;
+#ifdef RIPPER
+ ripper_dispatch_scan_event(parser, tSP);
+#endif
+ goto retry; /* skip \\n */
+ }
+ pushback(c);
+ return '\\';
+
+ case '%':
+ return parse_percent(parser, space_seen, last_state);
+
+ case '$':
+ return parse_gvar(parser, last_state);
+
+ case '@':
+ return parse_atmark(parser, last_state);
+
+ case '_':
+ if (was_bol() && whole_match_p("__END__", 7, 0)) {
+ ruby__end__seen = 1;
+ parser->eofp = Qtrue;
+#ifndef RIPPER
+ return -1;
+#else
+ lex_goto_eol(parser);
+ ripper_dispatch_scan_event(parser, k__END__);
+ return 0;
+#endif
+ }
+ newtok();
+ break;
+
+ default:
+ if (!parser_is_identchar()) {
+ compile_error(PARSER_ARG "Invalid char `\\x%02X' in expression", c);
+ goto retry;
+ }
+
+ newtok();
+ break;
+ }
+
+ return parse_ident(parser, c, cmd_state);
+}
+
+#if YYPURE
+static int
+yylex(void *lval, void *p)
+#else
+yylex(void *p)
+#endif
+{
+ struct parser_params *parser = (struct parser_params*)p;
+ int t;
+
+#if YYPURE
+ parser->parser_yylval = lval;
+ parser->parser_yylval->val = Qundef;
+#endif
+ t = parser_yylex(parser);
+#ifdef RIPPER
+ if (!NIL_P(parser->delayed)) {
+ ripper_dispatch_delayed_token(parser, t);
+ return t;
+ }
+ if (t != 0)
+ ripper_dispatch_scan_event(parser, t);
+#endif
+
+ return t;
+}
+
+#ifndef RIPPER
+static NODE*
+node_newnode(struct parser_params *parser, enum node_type type, VALUE a0, VALUE a1, VALUE a2)
+{
+ NODE *n = (rb_node_newnode)(type, a0, a1, a2);
+ nd_set_line(n, ruby_sourceline);
+ return n;
+}
+
+static enum node_type
+nodetype(NODE *node) /* for debug */
+{
+ return (enum node_type)nd_type(node);
+}
+
+static int
+nodeline(NODE *node)
+{
+ return nd_line(node);
+}
+
+static NODE*
+newline_node(NODE *node)
+{
+ if (node) {
+ node = remove_begin(node);
+ node->flags |= NODE_FL_NEWLINE;
+ }
+ return node;
+}
+
+static void
+fixpos(NODE *node, NODE *orig)
+{
+ if (!node) return;
+ if (!orig) return;
+ if (orig == (NODE*)1) return;
+ nd_set_line(node, nd_line(orig));
+}
+
+static void
+parser_warning(struct parser_params *parser, NODE *node, const char *mesg)
+{
+ rb_compile_warning(ruby_sourcefile, nd_line(node), "%s", mesg);
+}
+#define parser_warning(node, mesg) parser_warning(parser, (node), (mesg))
+
+static void
+parser_warn(struct parser_params *parser, NODE *node, const char *mesg)
+{
+ rb_compile_warn(ruby_sourcefile, nd_line(node), "%s", mesg);
+}
+#define parser_warn(node, mesg) parser_warn(parser, (node), (mesg))
+
+static NODE*
+block_append_gen(struct parser_params *parser, NODE *head, NODE *tail)
+{
+ NODE *end, *h = head, *nd;
+
+ if (tail == 0) return head;
+
+ if (h == 0) return tail;
+ switch (nd_type(h)) {
+ case NODE_LIT:
+ case NODE_STR:
+ case NODE_SELF:
+ case NODE_TRUE:
+ case NODE_FALSE:
+ case NODE_NIL:
+ parser_warning(h, "unused literal ignored");
+ return tail;
+ default:
+ h = end = NEW_BLOCK(head);
+ end->nd_end = end;
+ fixpos(end, head);
+ head = end;
+ break;
+ case NODE_BLOCK:
+ end = h->nd_end;
+ break;
+ }
+
+ nd = end->nd_head;
+ switch (nd_type(nd)) {
+ case NODE_RETURN:
+ case NODE_BREAK:
+ case NODE_NEXT:
+ case NODE_REDO:
+ case NODE_RETRY:
+ if (RTEST(ruby_verbose)) {
+ parser_warning(tail, "statement not reached");
+ }
+ break;
+
+ default:
+ break;
+ }
+
+ if (nd_type(tail) != NODE_BLOCK) {
+ tail = NEW_BLOCK(tail);
+ tail->nd_end = tail;
+ }
+ end->nd_next = tail;
+ h->nd_end = tail->nd_end;
+ return head;
+}
+
+/* append item to the list */
+static NODE*
+list_append_gen(struct parser_params *parser, NODE *list, NODE *item)
+{
+ NODE *last;
+
+ if (list == 0) return NEW_LIST(item);
+ if (list->nd_next) {
+ last = list->nd_next->nd_end;
+ }
+ else {
+ last = list;
+ }
+
+ list->nd_alen += 1;
+ last->nd_next = NEW_LIST(item);
+ list->nd_next->nd_end = last->nd_next;
+ return list;
+}
+
+/* concat two lists */
+static NODE*
+list_concat(NODE *head, NODE *tail)
+{
+ NODE *last;
+
+ if (head->nd_next) {
+ last = head->nd_next->nd_end;
+ }
+ else {
+ last = head;
+ }
+
+ head->nd_alen += tail->nd_alen;
+ last->nd_next = tail;
+ if (tail->nd_next) {
+ head->nd_next->nd_end = tail->nd_next->nd_end;
+ }
+ else {
+ head->nd_next->nd_end = tail;
+ }
+
+ return head;
+}
+
+static int
+literal_concat0(struct parser_params *parser, VALUE head, VALUE tail)
+{
+ if (NIL_P(tail)) return 1;
+ if (!rb_enc_compatible(head, tail)) {
+ compile_error(PARSER_ARG "string literal encodings differ (%s / %s)",
+ rb_enc_name(rb_enc_get(head)),
+ rb_enc_name(rb_enc_get(tail)));
+ rb_str_resize(head, 0);
+ rb_str_resize(tail, 0);
+ return 0;
+ }
+ rb_str_buf_append(head, tail);
+ return 1;
+}
+
+/* concat two string literals */
+static NODE *
+literal_concat_gen(struct parser_params *parser, NODE *head, NODE *tail)
+{
+ enum node_type htype;
+ NODE *headlast;
+ VALUE lit;
+
+ if (!head) return tail;
+ if (!tail) return head;
+
+ htype = nd_type(head);
+ if (htype == NODE_EVSTR) {
+ NODE *node = NEW_DSTR(Qnil);
+ head = list_append(node, head);
+ htype = NODE_DSTR;
+ }
+ switch (nd_type(tail)) {
+ case NODE_STR:
+ if (htype == NODE_DSTR && (headlast = head->nd_next->nd_end->nd_head) &&
+ nd_type(headlast) == NODE_STR) {
+ htype = NODE_STR;
+ lit = headlast->nd_lit;
+ }
+ else {
+ lit = head->nd_lit;
+ }
+ if (htype == NODE_STR) {
+ if (!literal_concat0(parser, lit, tail->nd_lit)) {
+ error:
+ rb_gc_force_recycle((VALUE)head);
+ rb_gc_force_recycle((VALUE)tail);
+ return 0;
+ }
+ rb_gc_force_recycle((VALUE)tail);
+ }
+ else {
+ list_append(head, tail);
+ }
+ break;
+
+ case NODE_DSTR:
+ if (htype == NODE_STR) {
+ if (!literal_concat0(parser, head->nd_lit, tail->nd_lit))
+ goto error;
+ tail->nd_lit = head->nd_lit;
+ rb_gc_force_recycle((VALUE)head);
+ head = tail;
+ }
+ else if (NIL_P(tail->nd_lit)) {
+ append:
+ head->nd_alen += tail->nd_alen - 1;
+ head->nd_next->nd_end->nd_next = tail->nd_next;
+ head->nd_next->nd_end = tail->nd_next->nd_end;
+ rb_gc_force_recycle((VALUE)tail);
+ }
+ else if (htype == NODE_DSTR && (headlast = head->nd_next->nd_end->nd_head) &&
+ nd_type(headlast) == NODE_STR) {
+ lit = headlast->nd_lit;
+ if (!literal_concat0(parser, lit, tail->nd_lit))
+ goto error;
+ tail->nd_lit = Qnil;
+ goto append;
+ }
+ else {
+ nd_set_type(tail, NODE_ARRAY);
+ tail->nd_head = NEW_STR(tail->nd_lit);
+ list_concat(head, tail);
+ }
+ break;
+
+ case NODE_EVSTR:
+ if (htype == NODE_STR) {
+ nd_set_type(head, NODE_DSTR);
+ head->nd_alen = 1;
+ }
+ list_append(head, tail);
+ break;
+ }
+ return head;
+}
+
+static NODE *
+evstr2dstr_gen(struct parser_params *parser, NODE *node)
+{
+ if (nd_type(node) == NODE_EVSTR) {
+ node = list_append(NEW_DSTR(Qnil), node);
+ }
+ return node;
+}
+
+static NODE *
+new_evstr_gen(struct parser_params *parser, NODE *node)
+{
+ NODE *head = node;
+
+ if (node) {
+ switch (nd_type(node)) {
+ case NODE_STR: case NODE_DSTR: case NODE_EVSTR:
+ return node;
+ }
+ }
+ return NEW_EVSTR(head);
+}
+
+static NODE *
+call_bin_op_gen(struct parser_params *parser, NODE *recv, ID id, NODE *arg1)
+{
+ value_expr(recv);
+ value_expr(arg1);
+ return NEW_CALL(recv, id, NEW_LIST(arg1));
+}
+
+static NODE *
+call_uni_op_gen(struct parser_params *parser, NODE *recv, ID id)
+{
+ value_expr(recv);
+ return NEW_CALL(recv, id, 0);
+}
+
+static NODE*
+match_op_gen(struct parser_params *parser, NODE *node1, NODE *node2)
+{
+ value_expr(node1);
+ value_expr(node2);
+ if (node1) {
+ switch (nd_type(node1)) {
+ case NODE_DREGX:
+ case NODE_DREGX_ONCE:
+ return NEW_MATCH2(node1, node2);
+
+ case NODE_LIT:
+ if (RB_TYPE_P(node1->nd_lit, T_REGEXP)) {
+ return NEW_MATCH2(node1, node2);
+ }
+ }
+ }
+
+ if (node2) {
+ switch (nd_type(node2)) {
+ case NODE_DREGX:
+ case NODE_DREGX_ONCE:
+ return NEW_MATCH3(node2, node1);
+
+ case NODE_LIT:
+ if (RB_TYPE_P(node2->nd_lit, T_REGEXP)) {
+ return NEW_MATCH3(node2, node1);
+ }
+ }
+ }
+
+ return NEW_CALL(node1, tMATCH, NEW_LIST(node2));
+}
+
+# if WARN_PAST_SCOPE
+static int
+past_dvar_p(struct parser_params *parser, ID id)
+{
+ struct vtable *past = lvtbl->past;
+ while (past) {
+ if (vtable_included(past, id)) return 1;
+ past = past->prev;
+ }
+ return 0;
+}
+# endif
+
+static NODE*
+gettable_gen(struct parser_params *parser, ID id)
+{
+ switch (id) {
+ case keyword_self:
+ return NEW_SELF();
+ case keyword_nil:
+ return NEW_NIL();
+ case keyword_true:
+ return NEW_TRUE();
+ case keyword_false:
+ return NEW_FALSE();
+ case keyword__FILE__:
+ return NEW_STR(rb_str_dup(ruby_sourcefile_string));
+ case keyword__LINE__:
+ return NEW_LIT(INT2FIX(tokline));
+ case keyword__ENCODING__:
+ return NEW_LIT(rb_enc_from_encoding(current_enc));
+ }
+ switch (id_type(id)) {
+ case ID_LOCAL:
+ if (dyna_in_block() && dvar_defined(id)) {
+ if (id == current_arg) {
+ rb_warnV("circular argument reference - %"PRIsVALUE, rb_id2str(id));
+ }
+ return NEW_DVAR(id);
+ }
+ if (local_id(id)) {
+ if (id == current_arg) {
+ rb_warnV("circular argument reference - %"PRIsVALUE, rb_id2str(id));
+ }
+ return NEW_LVAR(id);
+ }
+# if WARN_PAST_SCOPE
+ if (!in_defined && RTEST(ruby_verbose) && past_dvar_p(parser, id)) {
+ rb_warningV("possible reference to past scope - %"PRIsVALUE, rb_id2str(id));
+ }
+# endif
+ /* method call without arguments */
+ return NEW_VCALL(id);
+ case ID_GLOBAL:
+ return NEW_GVAR(id);
+ case ID_INSTANCE:
+ return NEW_IVAR(id);
+ case ID_CONST:
+ return NEW_CONST(id);
+ case ID_CLASS:
+ return NEW_CVAR(id);
+ }
+ compile_error(PARSER_ARG "identifier %"PRIsVALUE" is not valid to get", rb_id2str(id));
+ return 0;
+}
+#else /* !RIPPER */
+static int
+id_is_var_gen(struct parser_params *parser, ID id)
+{
+ if (is_notop_id(id)) {
+ switch (id & ID_SCOPE_MASK) {
+ case ID_GLOBAL: case ID_INSTANCE: case ID_CONST: case ID_CLASS:
+ return 1;
+ case ID_LOCAL:
+ if (dyna_in_block() && dvar_defined(id)) return 1;
+ if (local_id(id)) return 1;
+ /* method call without arguments */
+ return 0;
+ }
+ }
+ compile_error(PARSER_ARG "identifier %s is not valid to get", rb_id2str(id));
+ return 0;
+}
+#endif /* !RIPPER */
+
+#if PARSER_DEBUG
+static const char *
+lex_state_name(enum lex_state_e state)
+{
+ static const char names[][12] = {
+ "EXPR_BEG", "EXPR_END", "EXPR_ENDARG", "EXPR_ENDFN", "EXPR_ARG",
+ "EXPR_CMDARG", "EXPR_MID", "EXPR_FNAME", "EXPR_DOT", "EXPR_CLASS",
+ "EXPR_VALUE",
+ };
+
+ if ((unsigned)state & ~(~0u << EXPR_MAX_STATE))
+ return names[ffs(state)];
+ return NULL;
+}
+#endif
+
+#ifdef RIPPER
+static VALUE
+assignable_gen(struct parser_params *parser, VALUE lhs)
+#else
+static NODE*
+assignable_gen(struct parser_params *parser, ID id, NODE *val)
+#endif
+{
+#ifdef RIPPER
+ ID id = get_id(lhs);
+# define assignable_result(x) get_value(lhs)
+# define parser_yyerror(parser, x) (dispatch1(assign_error, lhs), ripper_error())
+#else
+# define assignable_result(x) (x)
+#endif
+ if (!id) return assignable_result(0);
+ switch (id) {
+ case keyword_self:
+ yyerror("Can't change the value of self");
+ goto error;
+ case keyword_nil:
+ yyerror("Can't assign to nil");
+ goto error;
+ case keyword_true:
+ yyerror("Can't assign to true");
+ goto error;
+ case keyword_false:
+ yyerror("Can't assign to false");
+ goto error;
+ case keyword__FILE__:
+ yyerror("Can't assign to __FILE__");
+ goto error;
+ case keyword__LINE__:
+ yyerror("Can't assign to __LINE__");
+ goto error;
+ case keyword__ENCODING__:
+ yyerror("Can't assign to __ENCODING__");
+ goto error;
+ }
+ switch (id_type(id)) {
+ case ID_LOCAL:
+ if (dyna_in_block()) {
+ if (dvar_curr(id)) {
+ return assignable_result(NEW_DASGN_CURR(id, val));
+ }
+ else if (dvar_defined(id)) {
+ return assignable_result(NEW_DASGN(id, val));
+ }
+ else if (local_id(id)) {
+ return assignable_result(NEW_LASGN(id, val));
+ }
+ else {
+ dyna_var(id);
+ return assignable_result(NEW_DASGN_CURR(id, val));
+ }
+ }
+ else {
+ if (!local_id(id)) {
+ local_var(id);
+ }
+ return assignable_result(NEW_LASGN(id, val));
+ }
+ break;
+ case ID_GLOBAL:
+ return assignable_result(NEW_GASGN(id, val));
+ case ID_INSTANCE:
+ return assignable_result(NEW_IASGN(id, val));
+ case ID_CONST:
+ if (!in_def && !in_single)
+ return assignable_result(NEW_CDECL(id, val, 0));
+ yyerror("dynamic constant assignment");
+ break;
+ case ID_CLASS:
+ return assignable_result(NEW_CVASGN(id, val));
+ default:
+ compile_error(PARSER_ARG "identifier %"PRIsVALUE" is not valid to set", rb_id2str(id));
+ }
+ error:
+ return assignable_result(0);
+#undef assignable_result
+#undef parser_yyerror
+}
+
+static int
+is_private_local_id(ID name)
+{
+ VALUE s;
+ if (name == idUScore) return 1;
+ if (!is_local_id(name)) return 0;
+ s = rb_id2str(name);
+ if (!s) return 0;
+ return RSTRING_PTR(s)[0] == '_';
+}
+
+#define LVAR_USED ((ID)1 << (sizeof(ID) * CHAR_BIT - 1))
+
+static int
+shadowing_lvar_0(struct parser_params *parser, ID name)
+{
+ if (is_private_local_id(name)) return 1;
+ if (dyna_in_block()) {
+ if (dvar_curr(name)) {
+ yyerror("duplicated argument name");
+ }
+ else if (dvar_defined_get(name) || local_id(name)) {
+ rb_warningV("shadowing outer local variable - %"PRIsVALUE, rb_id2str(name));
+ vtable_add(lvtbl->vars, name);
+ if (lvtbl->used) {
+ vtable_add(lvtbl->used, (ID)ruby_sourceline | LVAR_USED);
+ }
+ return 0;
+ }
+ }
+ else {
+ if (local_id(name)) {
+ yyerror("duplicated argument name");
+ }
+ }
+ return 1;
+}
+
+static ID
+shadowing_lvar_gen(struct parser_params *parser, ID name)
+{
+ shadowing_lvar_0(parser, name);
+ return name;
+}
+
+static void
+new_bv_gen(struct parser_params *parser, ID name)
+{
+ if (!name) return;
+ if (!is_local_id(name)) {
+ compile_error(PARSER_ARG "invalid local variable - %"PRIsVALUE,
+ rb_id2str(name));
+ return;
+ }
+ if (!shadowing_lvar_0(parser, name)) return;
+ dyna_var(name);
+}
+
+#ifndef RIPPER
+static NODE *
+aryset_gen(struct parser_params *parser, NODE *recv, NODE *idx)
+{
+ return NEW_ATTRASGN(recv, tASET, idx);
+}
+
+static void
+block_dup_check_gen(struct parser_params *parser, NODE *node1, NODE *node2)
+{
+ if (node2 && node1 && nd_type(node1) == NODE_BLOCK_PASS) {
+ compile_error(PARSER_ARG "both block arg and actual block given");
+ }
+}
+
+static NODE *
+attrset_gen(struct parser_params *parser, NODE *recv, ID id)
+{
+ return NEW_ATTRASGN(recv, rb_id_attrset(id), 0);
+}
+
+static void
+rb_backref_error_gen(struct parser_params *parser, NODE *node)
+{
+ switch (nd_type(node)) {
+ case NODE_NTH_REF:
+ compile_error(PARSER_ARG "Can't set variable $%ld", node->nd_nth);
+ break;
+ case NODE_BACK_REF:
+ compile_error(PARSER_ARG "Can't set variable $%c", (int)node->nd_nth);
+ break;
+ }
+}
+
+static NODE *
+arg_concat_gen(struct parser_params *parser, NODE *node1, NODE *node2)
+{
+ if (!node2) return node1;
+ switch (nd_type(node1)) {
+ case NODE_BLOCK_PASS:
+ if (node1->nd_head)
+ node1->nd_head = arg_concat(node1->nd_head, node2);
+ else
+ node1->nd_head = NEW_LIST(node2);
+ return node1;
+ case NODE_ARGSPUSH:
+ if (nd_type(node2) != NODE_ARRAY) break;
+ node1->nd_body = list_concat(NEW_LIST(node1->nd_body), node2);
+ nd_set_type(node1, NODE_ARGSCAT);
+ return node1;
+ case NODE_ARGSCAT:
+ if (nd_type(node2) != NODE_ARRAY ||
+ nd_type(node1->nd_body) != NODE_ARRAY) break;
+ node1->nd_body = list_concat(node1->nd_body, node2);
+ return node1;
+ }
+ return NEW_ARGSCAT(node1, node2);
+}
+
+static NODE *
+arg_append_gen(struct parser_params *parser, NODE *node1, NODE *node2)
+{
+ if (!node1) return NEW_LIST(node2);
+ switch (nd_type(node1)) {
+ case NODE_ARRAY:
+ return list_append(node1, node2);
+ case NODE_BLOCK_PASS:
+ node1->nd_head = arg_append(node1->nd_head, node2);
+ return node1;
+ case NODE_ARGSPUSH:
+ node1->nd_body = list_append(NEW_LIST(node1->nd_body), node2);
+ nd_set_type(node1, NODE_ARGSCAT);
+ return node1;
+ }
+ return NEW_ARGSPUSH(node1, node2);
+}
+
+static NODE *
+splat_array(NODE* node)
+{
+ if (nd_type(node) == NODE_SPLAT) node = node->nd_head;
+ if (nd_type(node) == NODE_ARRAY) return node;
+ return 0;
+}
+
+static NODE *
+node_assign_gen(struct parser_params *parser, NODE *lhs, NODE *rhs)
+{
+ if (!lhs) return 0;
+
+ switch (nd_type(lhs)) {
+ case NODE_GASGN:
+ case NODE_IASGN:
+ case NODE_IASGN2:
+ case NODE_LASGN:
+ case NODE_DASGN:
+ case NODE_DASGN_CURR:
+ case NODE_MASGN:
+ case NODE_CDECL:
+ case NODE_CVASGN:
+ lhs->nd_value = rhs;
+ break;
+
+ case NODE_ATTRASGN:
+ case NODE_CALL:
+ lhs->nd_args = arg_append(lhs->nd_args, rhs);
+ break;
+
+ default:
+ /* should not happen */
+ break;
+ }
+
+ return lhs;
+}
+
+static int
+value_expr_gen(struct parser_params *parser, NODE *node)
+{
+ int cond = 0;
+
+ if (!node) {
+ rb_warning0("empty expression");
+ }
+ while (node) {
+ switch (nd_type(node)) {
+ case NODE_RETURN:
+ case NODE_BREAK:
+ case NODE_NEXT:
+ case NODE_REDO:
+ case NODE_RETRY:
+ if (!cond) yyerror("void value expression");
+ /* or "control never reach"? */
+ return FALSE;
+
+ case NODE_BLOCK:
+ while (node->nd_next) {
+ node = node->nd_next;
+ }
+ node = node->nd_head;
+ break;
+
+ case NODE_BEGIN:
+ node = node->nd_body;
+ break;
+
+ case NODE_IF:
+ if (!node->nd_body) {
+ node = node->nd_else;
+ break;
+ }
+ else if (!node->nd_else) {
+ node = node->nd_body;
+ break;
+ }
+ if (!value_expr(node->nd_body)) return FALSE;
+ node = node->nd_else;
+ break;
+
+ case NODE_AND:
+ case NODE_OR:
+ cond = 1;
+ node = node->nd_2nd;
+ break;
+
+ default:
+ return TRUE;
+ }
+ }
+
+ return TRUE;
+}
+
+static void
+void_expr_gen(struct parser_params *parser, NODE *node)
+{
+ const char *useless = 0;
+
+ if (!RTEST(ruby_verbose)) return;
+
+ if (!node) return;
+ switch (nd_type(node)) {
+ case NODE_CALL:
+ switch (node->nd_mid) {
+ case '+':
+ case '-':
+ case '*':
+ case '/':
+ case '%':
+ case tPOW:
+ case tUPLUS:
+ case tUMINUS:
+ case '|':
+ case '^':
+ case '&':
+ case tCMP:
+ case '>':
+ case tGEQ:
+ case '<':
+ case tLEQ:
+ case tEQ:
+ case tNEQ:
+ useless = rb_id2name(node->nd_mid);
+ break;
+ }
+ break;
+
+ case NODE_LVAR:
+ case NODE_DVAR:
+ case NODE_GVAR:
+ case NODE_IVAR:
+ case NODE_CVAR:
+ case NODE_NTH_REF:
+ case NODE_BACK_REF:
+ useless = "a variable";
+ break;
+ case NODE_CONST:
+ useless = "a constant";
+ break;
+ case NODE_LIT:
+ case NODE_STR:
+ case NODE_DSTR:
+ case NODE_DREGX:
+ case NODE_DREGX_ONCE:
+ useless = "a literal";
+ break;
+ case NODE_COLON2:
+ case NODE_COLON3:
+ useless = "::";
+ break;
+ case NODE_DOT2:
+ useless = "..";
+ break;
+ case NODE_DOT3:
+ useless = "...";
+ break;
+ case NODE_SELF:
+ useless = "self";
+ break;
+ case NODE_NIL:
+ useless = "nil";
+ break;
+ case NODE_TRUE:
+ useless = "true";
+ break;
+ case NODE_FALSE:
+ useless = "false";
+ break;
+ case NODE_DEFINED:
+ useless = "defined?";
+ break;
+ }
+
+ if (useless) {
+ int line = ruby_sourceline;
+
+ ruby_sourceline = nd_line(node);
+ rb_warnS("possibly useless use of %s in void context", useless);
+ ruby_sourceline = line;
+ }
+}
+
+static void
+void_stmts_gen(struct parser_params *parser, NODE *node)
+{
+ if (!RTEST(ruby_verbose)) return;
+ if (!node) return;
+ if (nd_type(node) != NODE_BLOCK) return;
+
+ for (;;) {
+ if (!node->nd_next) return;
+ void_expr0(node->nd_head);
+ node = node->nd_next;
+ }
+}
+
+static NODE *
+remove_begin(NODE *node)
+{
+ NODE **n = &node, *n1 = node;
+ while (n1 && nd_type(n1) == NODE_BEGIN && n1->nd_body) {
+ *n = n1 = n1->nd_body;
+ }
+ return node;
+}
+
+static NODE *
+remove_begin_all(NODE *node)
+{
+ NODE **n = &node, *n1 = node;
+ while (n1 && nd_type(n1) == NODE_BEGIN) {
+ *n = n1 = n1->nd_body;
+ }
+ return node;
+}
+
+static void
+reduce_nodes_gen(struct parser_params *parser, NODE **body)
+{
+ NODE *node = *body;
+
+ if (!node) {
+ *body = NEW_NIL();
+ return;
+ }
+#define subnodes(n1, n2) \
+ ((!node->n1) ? (node->n2 ? (body = &node->n2, 1) : 0) : \
+ (!node->n2) ? (body = &node->n1, 1) : \
+ (reduce_nodes(&node->n1), body = &node->n2, 1))
+
+ while (node) {
+ int newline = (int)(node->flags & NODE_FL_NEWLINE);
+ switch (nd_type(node)) {
+ end:
+ case NODE_NIL:
+ *body = 0;
+ return;
+ case NODE_RETURN:
+ *body = node = node->nd_stts;
+ if (newline && node) node->flags |= NODE_FL_NEWLINE;
+ continue;
+ case NODE_BEGIN:
+ *body = node = node->nd_body;
+ if (newline && node) node->flags |= NODE_FL_NEWLINE;
+ continue;
+ case NODE_BLOCK:
+ body = &node->nd_end->nd_head;
+ break;
+ case NODE_IF:
+ if (subnodes(nd_body, nd_else)) break;
+ return;
+ case NODE_CASE:
+ body = &node->nd_body;
+ break;
+ case NODE_WHEN:
+ if (!subnodes(nd_body, nd_next)) goto end;
+ break;
+ case NODE_ENSURE:
+ if (!subnodes(nd_head, nd_resq)) goto end;
+ break;
+ case NODE_RESCUE:
+ if (node->nd_else) {
+ body = &node->nd_resq;
+ break;
+ }
+ if (!subnodes(nd_head, nd_resq)) goto end;
+ break;
+ default:
+ return;
+ }
+ node = *body;
+ if (newline && node) node->flags |= NODE_FL_NEWLINE;
+ }
+
+#undef subnodes
+}
+
+static int
+is_static_content(NODE *node)
+{
+ if (!node) return 1;
+ switch (nd_type(node)) {
+ case NODE_HASH:
+ if (!(node = node->nd_head)) break;
+ case NODE_ARRAY:
+ do {
+ if (!is_static_content(node->nd_head)) return 0;
+ } while ((node = node->nd_next) != 0);
+ case NODE_LIT:
+ case NODE_STR:
+ case NODE_NIL:
+ case NODE_TRUE:
+ case NODE_FALSE:
+ case NODE_ZARRAY:
+ break;
+ default:
+ return 0;
+ }
+ return 1;
+}
+
+static int
+assign_in_cond(struct parser_params *parser, NODE *node)
+{
+ switch (nd_type(node)) {
+ case NODE_MASGN:
+ yyerror("multiple assignment in conditional");
+ return 1;
+
+ case NODE_LASGN:
+ case NODE_DASGN:
+ case NODE_DASGN_CURR:
+ case NODE_GASGN:
+ case NODE_IASGN:
+ break;
+
+ default:
+ return 0;
+ }
+
+ if (!node->nd_value) return 1;
+ if (is_static_content(node->nd_value)) {
+ /* reports always */
+ parser_warn(node->nd_value, "found = in conditional, should be ==");
+ }
+ return 1;
+}
+
+static void
+warn_unless_e_option(struct parser_params *parser, NODE *node, const char *str)
+{
+ if (!e_option_supplied(parser)) parser_warn(node, str);
+}
+
+static void
+warning_unless_e_option(struct parser_params *parser, NODE *node, const char *str)
+{
+ if (!e_option_supplied(parser)) parser_warning(node, str);
+}
+
+static void
+fixup_nodes(NODE **rootnode)
+{
+ NODE *node, *next, *head;
+
+ for (node = *rootnode; node; node = next) {
+ enum node_type type;
+ VALUE val;
+
+ next = node->nd_next;
+ head = node->nd_head;
+ rb_gc_force_recycle((VALUE)node);
+ *rootnode = next;
+ switch (type = nd_type(head)) {
+ case NODE_DOT2:
+ case NODE_DOT3:
+ val = rb_range_new(head->nd_beg->nd_lit, head->nd_end->nd_lit,
+ type == NODE_DOT3);
+ rb_gc_force_recycle((VALUE)head->nd_beg);
+ rb_gc_force_recycle((VALUE)head->nd_end);
+ nd_set_type(head, NODE_LIT);
+ head->nd_lit = val;
+ break;
+ default:
+ break;
+ }
+ }
+}
+
+static NODE *cond0(struct parser_params*,NODE*);
+
+static NODE*
+range_op(struct parser_params *parser, NODE *node)
+{
+ enum node_type type;
+
+ if (node == 0) return 0;
+
+ type = nd_type(node);
+ value_expr(node);
+ if (type == NODE_LIT && FIXNUM_P(node->nd_lit)) {
+ warn_unless_e_option(parser, node, "integer literal in conditional range");
+ return NEW_CALL(node, tEQ, NEW_LIST(NEW_GVAR(rb_intern("$."))));
+ }
+ return cond0(parser, node);
+}
+
+static int
+literal_node(NODE *node)
+{
+ if (!node) return 1; /* same as NODE_NIL */
+ switch (nd_type(node)) {
+ case NODE_LIT:
+ case NODE_STR:
+ case NODE_DSTR:
+ case NODE_EVSTR:
+ case NODE_DREGX:
+ case NODE_DREGX_ONCE:
+ case NODE_DSYM:
+ return 2;
+ case NODE_TRUE:
+ case NODE_FALSE:
+ case NODE_NIL:
+ return 1;
+ }
+ return 0;
+}
+
+static NODE*
+cond0(struct parser_params *parser, NODE *node)
+{
+ if (node == 0) return 0;
+ assign_in_cond(parser, node);
+
+ switch (nd_type(node)) {
+ case NODE_DSTR:
+ case NODE_EVSTR:
+ case NODE_STR:
+ rb_warn0("string literal in condition");
+ break;
+
+ case NODE_DREGX:
+ case NODE_DREGX_ONCE:
+ warning_unless_e_option(parser, node, "regex literal in condition");
+ return NEW_MATCH2(node, NEW_GVAR(rb_intern("$_")));
+
+ case NODE_AND:
+ case NODE_OR:
+ node->nd_1st = cond0(parser, node->nd_1st);
+ node->nd_2nd = cond0(parser, node->nd_2nd);
+ break;
+
+ case NODE_DOT2:
+ case NODE_DOT3:
+ node->nd_beg = range_op(parser, node->nd_beg);
+ node->nd_end = range_op(parser, node->nd_end);
+ if (nd_type(node) == NODE_DOT2) nd_set_type(node,NODE_FLIP2);
+ else if (nd_type(node) == NODE_DOT3) nd_set_type(node, NODE_FLIP3);
+ if (!e_option_supplied(parser)) {
+ int b = literal_node(node->nd_beg);
+ int e = literal_node(node->nd_end);
+ if ((b == 1 && e == 1) || (b + e >= 2 && RTEST(ruby_verbose))) {
+ parser_warn(node, "range literal in condition");
+ }
+ }
+ break;
+
+ case NODE_DSYM:
+ parser_warning(node, "literal in condition");
+ break;
+
+ case NODE_LIT:
+ if (RB_TYPE_P(node->nd_lit, T_REGEXP)) {
+ warn_unless_e_option(parser, node, "regex literal in condition");
+ nd_set_type(node, NODE_MATCH);
+ }
+ else {
+ parser_warning(node, "literal in condition");
+ }
+ default:
+ break;
+ }
+ return node;
+}
+
+static NODE*
+cond_gen(struct parser_params *parser, NODE *node)
+{
+ if (node == 0) return 0;
+ return cond0(parser, node);
+}
+
+static NODE*
+logop_gen(struct parser_params *parser, enum node_type type, NODE *left, NODE *right)
+{
+ value_expr(left);
+ if (left && (enum node_type)nd_type(left) == type) {
+ NODE *node = left, *second;
+ while ((second = node->nd_2nd) != 0 && (enum node_type)nd_type(second) == type) {
+ node = second;
+ }
+ node->nd_2nd = NEW_NODE(type, second, right, 0);
+ return left;
+ }
+ return NEW_NODE(type, left, right, 0);
+}
+
+static void
+no_blockarg(struct parser_params *parser, NODE *node)
+{
+ if (node && nd_type(node) == NODE_BLOCK_PASS) {
+ compile_error(PARSER_ARG "block argument should not be given");
+ }
+}
+
+static NODE *
+ret_args_gen(struct parser_params *parser, NODE *node)
+{
+ if (node) {
+ no_blockarg(parser, node);
+ if (nd_type(node) == NODE_ARRAY) {
+ if (node->nd_next == 0) {
+ node = node->nd_head;
+ }
+ else {
+ nd_set_type(node, NODE_VALUES);
+ }
+ }
+ }
+ return node;
+}
+
+static NODE *
+new_yield_gen(struct parser_params *parser, NODE *node)
+{
+ if (node) no_blockarg(parser, node);
+
+ return NEW_YIELD(node);
+}
+
+static VALUE
+negate_lit(VALUE lit)
+{
+ int type = TYPE(lit);
+ switch (type) {
+ case T_FIXNUM:
+ lit = LONG2FIX(-FIX2LONG(lit));
+ break;
+ case T_BIGNUM:
+ case T_RATIONAL:
+ case T_COMPLEX:
+ lit = rb_funcall(lit,tUMINUS,0,0);
+ break;
+ case T_FLOAT:
+#if USE_FLONUM
+ if (FLONUM_P(lit)) {
+ lit = DBL2NUM(-RFLOAT_VALUE(lit));
+ break;
+ }
+#endif
+ RFLOAT(lit)->float_value = -RFLOAT_VALUE(lit);
+ break;
+ default:
+ rb_bug("unknown literal type (%d) passed to negate_lit", type);
+ break;
+ }
+ return lit;
+}
+
+static NODE *
+arg_blk_pass(NODE *node1, NODE *node2)
+{
+ if (node2) {
+ node2->nd_head = node1;
+ return node2;
+ }
+ return node1;
+}
+
+
+static NODE*
+new_args_gen(struct parser_params *parser, NODE *m, NODE *o, ID r, NODE *p, NODE *tail)
+{
+ int saved_line = ruby_sourceline;
+ struct rb_args_info *args = tail->nd_ainfo;
+
+ args->pre_args_num = m ? rb_long2int(m->nd_plen) : 0;
+ args->pre_init = m ? m->nd_next : 0;
+
+ args->post_args_num = p ? rb_long2int(p->nd_plen) : 0;
+ args->post_init = p ? p->nd_next : 0;
+ args->first_post_arg = p ? p->nd_pid : 0;
+
+ args->rest_arg = r;
+
+ args->opt_args = o;
+
+ ruby_sourceline = saved_line;
+
+ return tail;
+}
+
+static NODE*
+new_args_tail_gen(struct parser_params *parser, NODE *k, ID kr, ID b)
+{
+ int saved_line = ruby_sourceline;
+ struct rb_args_info *args;
+ NODE *node;
+
+ args = ZALLOC(struct rb_args_info);
+ node = NEW_NODE(NODE_ARGS, 0, 0, args);
+
+ args->block_arg = b;
+ args->kw_args = k;
+
+ if (k) {
+ /*
+ * def foo(k1: 1, kr1:, k2: 2, **krest, &b)
+ * variable order: k1, kr1, k2, &b, internal_id, krest
+ * #=> <reorder>
+ * variable order: kr1, k1, k2, internal_id, krest, &b
+ */
+ ID kw_bits;
+ NODE *kwn = k;
+ struct vtable *required_kw_vars = vtable_alloc(NULL);
+ struct vtable *kw_vars = vtable_alloc(NULL);
+ int i;
+
+ while (kwn) {
+ NODE *val_node = kwn->nd_body->nd_value;
+ ID vid = kwn->nd_body->nd_vid;
+
+ if (val_node == (NODE *)-1) {
+ vtable_add(required_kw_vars, vid);
+ }
+ else {
+ vtable_add(kw_vars, vid);
+ }
+
+ kwn = kwn->nd_next;
+ }
+
+ kw_bits = internal_id();
+ if (kr && is_junk_id(kr)) vtable_pop(lvtbl->args, 1);
+ vtable_pop(lvtbl->args, vtable_size(required_kw_vars) + vtable_size(kw_vars) + (b != 0));
+
+ for (i=0; i<vtable_size(required_kw_vars); i++) arg_var(required_kw_vars->tbl[i]);
+ for (i=0; i<vtable_size(kw_vars); i++) arg_var(kw_vars->tbl[i]);
+ vtable_free(required_kw_vars);
+ vtable_free(kw_vars);
+
+ arg_var(kw_bits);
+ if (kr) arg_var(kr);
+ if (b) arg_var(b);
+
+ args->kw_rest_arg = NEW_DVAR(kw_bits);
+ args->kw_rest_arg->nd_cflag = kr;
+ }
+ else if (kr) {
+ if (b) vtable_pop(lvtbl->args, 1); /* reorder */
+ arg_var(kr);
+ if (b) arg_var(b);
+ args->kw_rest_arg = NEW_DVAR(kr);
+ }
+
+ ruby_sourceline = saved_line;
+ return node;
+}
+
+static NODE*
+dsym_node_gen(struct parser_params *parser, NODE *node)
+{
+ VALUE lit;
+
+ if (!node) {
+ return NEW_LIT(ID2SYM(idNULL));
+ }
+
+ switch (nd_type(node)) {
+ case NODE_DSTR:
+ nd_set_type(node, NODE_DSYM);
+ break;
+ case NODE_STR:
+ lit = node->nd_lit;
+ node->nd_lit = ID2SYM(rb_intern_str(lit));
+ nd_set_type(node, NODE_LIT);
+ break;
+ default:
+ node = NEW_NODE(NODE_DSYM, Qnil, 1, NEW_LIST(node));
+ break;
+ }
+ return node;
+}
+
+static int
+append_literal_keys(st_data_t k, st_data_t v, st_data_t h)
+{
+ NODE *node = (NODE *)v;
+ NODE **result = (NODE **)h;
+ node->nd_alen = 2;
+ node->nd_next->nd_end = node->nd_next;
+ node->nd_next->nd_next = 0;
+ if (*result)
+ list_concat(*result, node);
+ else
+ *result = node;
+ return ST_CONTINUE;
+}
+
+static NODE *
+remove_duplicate_keys(struct parser_params *parser, NODE *hash)
+{
+ st_table *literal_keys = st_init_numtable_with_size(hash->nd_alen / 2);
+ NODE *result = 0;
+ while (hash && hash->nd_head && hash->nd_next) {
+ NODE *head = hash->nd_head;
+ NODE *value = hash->nd_next;
+ NODE *next = value->nd_next;
+ VALUE key = (VALUE)head;
+ st_data_t data;
+ if (nd_type(head) == NODE_LIT &&
+ st_lookup(literal_keys, (key = head->nd_lit), &data)) {
+ rb_compile_warn(ruby_sourcefile, nd_line((NODE *)data),
+ "duplicated key at line %d ignored: %+"PRIsVALUE,
+ nd_line(head), head->nd_lit);
+ head = ((NODE *)data)->nd_next;
+ head->nd_head = block_append(head->nd_head, value->nd_head);
+ }
+ else {
+ st_insert(literal_keys, (st_data_t)key, (st_data_t)hash);
+ }
+ hash = next;
+ }
+ st_foreach(literal_keys, append_literal_keys, (st_data_t)&result);
+ st_free_table(literal_keys);
+ if (hash) {
+ if (!result) result = hash;
+ else list_concat(result, hash);
+ }
+ return result;
+}
+
+static NODE *
+new_hash_gen(struct parser_params *parser, NODE *hash)
+{
+ if (hash) hash = remove_duplicate_keys(parser, hash);
+ return NEW_HASH(hash);
+}
+#endif /* !RIPPER */
+
+#ifndef RIPPER
+static NODE *
+new_op_assign_gen(struct parser_params *parser, NODE *lhs, ID op, NODE *rhs)
+{
+ NODE *asgn;
+
+ if (lhs) {
+ ID vid = lhs->nd_vid;
+ if (op == tOROP) {
+ lhs->nd_value = rhs;
+ asgn = NEW_OP_ASGN_OR(gettable(vid), lhs);
+ if (is_notop_id(vid)) {
+ switch (id_type(vid)) {
+ case ID_GLOBAL:
+ case ID_INSTANCE:
+ case ID_CLASS:
+ asgn->nd_aid = vid;
+ }
+ }
+ }
+ else if (op == tANDOP) {
+ lhs->nd_value = rhs;
+ asgn = NEW_OP_ASGN_AND(gettable(vid), lhs);
+ }
+ else {
+ asgn = lhs;
+ asgn->nd_value = NEW_CALL(gettable(vid), op, NEW_LIST(rhs));
+ }
+ }
+ else {
+ asgn = NEW_BEGIN(0);
+ }
+ return asgn;
+}
+
+static NODE *
+new_attr_op_assign_gen(struct parser_params *parser, NODE *lhs, ID attr, ID op, NODE *rhs)
+{
+ NODE *asgn;
+
+ if (op == tOROP) {
+ op = 0;
+ }
+ else if (op == tANDOP) {
+ op = 1;
+ }
+ asgn = NEW_OP_ASGN2(lhs, attr, op, rhs);
+ fixpos(asgn, lhs);
+ return asgn;
+}
+
+static NODE *
+new_const_op_assign_gen(struct parser_params *parser, NODE *lhs, ID op, NODE *rhs)
+{
+ NODE *asgn;
+
+ if (op == tOROP) {
+ op = 0;
+ }
+ else if (op == tANDOP) {
+ op = 1;
+ }
+ if (lhs) {
+ asgn = NEW_OP_CDECL(lhs, op, rhs);
+ }
+ else {
+ asgn = NEW_BEGIN(0);
+ }
+ fixpos(asgn, lhs);
+ return asgn;
+}
+#else
+static VALUE
+new_op_assign_gen(struct parser_params *parser, VALUE lhs, VALUE op, VALUE rhs)
+{
+ return dispatch3(opassign, lhs, op, rhs);
+}
+
+static VALUE
+new_attr_op_assign_gen(struct parser_params *parser, VALUE lhs, VALUE type, VALUE attr, VALUE op, VALUE rhs)
+{
+ VALUE recv = dispatch3(field, lhs, type, attr);
+ return dispatch3(opassign, recv, op, rhs);
+}
+#endif
+
+static void
+warn_unused_var(struct parser_params *parser, struct local_vars *local)
+{
+ int i, cnt;
+ ID *v, *u;
+
+ if (!local->used) return;
+ v = local->vars->tbl;
+ u = local->used->tbl;
+ cnt = local->used->pos;
+ if (cnt != local->vars->pos) {
+ rb_bug("local->used->pos != local->vars->pos");
+ }
+ for (i = 0; i < cnt; ++i) {
+ if (!v[i] || (u[i] & LVAR_USED)) continue;
+ if (is_private_local_id(v[i])) continue;
+ rb_warn4V(ruby_sourcefile, (int)u[i], "assigned but unused variable - %"PRIsVALUE, rb_id2str(v[i]));
+ }
+}
+
+static void
+local_push_gen(struct parser_params *parser, int inherit_dvars)
+{
+ struct local_vars *local;
+
+ local = ALLOC(struct local_vars);
+ local->prev = lvtbl;
+ local->args = vtable_alloc(0);
+ local->vars = vtable_alloc(inherit_dvars ? DVARS_INHERIT : DVARS_TOPSCOPE);
+ local->used = !(inherit_dvars &&
+ (ifndef_ripper(compile_for_eval || e_option_supplied(parser))+0)) &&
+ RTEST(ruby_verbose) ? vtable_alloc(0) : 0;
+# if WARN_PAST_SCOPE
+ local->past = 0;
+# endif
+ local->cmdargs = cmdarg_stack;
+ cmdarg_stack = 0;
+ lvtbl = local;
+}
+
+static void
+local_pop_gen(struct parser_params *parser)
+{
+ struct local_vars *local = lvtbl->prev;
+ if (lvtbl->used) {
+ warn_unused_var(parser, lvtbl);
+ vtable_free(lvtbl->used);
+ }
+# if WARN_PAST_SCOPE
+ while (lvtbl->past) {
+ struct vtable *past = lvtbl->past;
+ lvtbl->past = past->prev;
+ vtable_free(past);
+ }
+# endif
+ vtable_free(lvtbl->args);
+ vtable_free(lvtbl->vars);
+ cmdarg_stack = lvtbl->cmdargs;
+ xfree(lvtbl);
+ lvtbl = local;
+}
+
+#ifndef RIPPER
+static ID*
+local_tbl_gen(struct parser_params *parser)
+{
+ int cnt_args = vtable_size(lvtbl->args);
+ int cnt_vars = vtable_size(lvtbl->vars);
+ int cnt = cnt_args + cnt_vars;
+ int i, j;
+ ID *buf;
+
+ if (cnt <= 0) return 0;
+ buf = ALLOC_N(ID, cnt + 1);
+ MEMCPY(buf+1, lvtbl->args->tbl, ID, cnt_args);
+ /* remove IDs duplicated to warn shadowing */
+ for (i = 0, j = cnt_args+1; i < cnt_vars; ++i) {
+ ID id = lvtbl->vars->tbl[i];
+ if (!vtable_included(lvtbl->args, id)) {
+ buf[j++] = id;
+ }
+ }
+ if (--j < cnt) REALLOC_N(buf, ID, (cnt = j) + 1);
+ buf[0] = cnt;
+ return buf;
+}
+#endif
+
+static void
+arg_var_gen(struct parser_params *parser, ID id)
+{
+ vtable_add(lvtbl->args, id);
+}
+
+static void
+local_var_gen(struct parser_params *parser, ID id)
+{
+ vtable_add(lvtbl->vars, id);
+ if (lvtbl->used) {
+ vtable_add(lvtbl->used, (ID)ruby_sourceline);
+ }
+}
+
+static int
+local_id_gen(struct parser_params *parser, ID id)
+{
+ struct vtable *vars, *args, *used;
+
+ vars = lvtbl->vars;
+ args = lvtbl->args;
+ used = lvtbl->used;
+
+ while (vars && POINTER_P(vars->prev)) {
+ vars = vars->prev;
+ args = args->prev;
+ if (used) used = used->prev;
+ }
+
+ if (vars && vars->prev == DVARS_INHERIT) {
+ return rb_local_defined(id);
+ }
+ else if (vtable_included(args, id)) {
+ return 1;
+ }
+ else {
+ int i = vtable_included(vars, id);
+ if (i && used) used->tbl[i-1] |= LVAR_USED;
+ return i != 0;
+ }
+}
+
+static const struct vtable *
+dyna_push_gen(struct parser_params *parser)
+{
+ lvtbl->args = vtable_alloc(lvtbl->args);
+ lvtbl->vars = vtable_alloc(lvtbl->vars);
+ if (lvtbl->used) {
+ lvtbl->used = vtable_alloc(lvtbl->used);
+ }
+ return lvtbl->args;
+}
+
+static void
+dyna_pop_vtable(struct parser_params *parser, struct vtable **vtblp)
+{
+ struct vtable *tmp = *vtblp;
+ *vtblp = tmp->prev;
+# if WARN_PAST_SCOPE
+ if (parser->parser_past_scope_enabled) {
+ tmp->prev = lvtbl->past;
+ lvtbl->past = tmp;
+ return;
+ }
+# endif
+ vtable_free(tmp);
+}
+
+static void
+dyna_pop_1(struct parser_params *parser)
+{
+ struct vtable *tmp;
+
+ if ((tmp = lvtbl->used) != 0) {
+ warn_unused_var(parser, lvtbl);
+ lvtbl->used = lvtbl->used->prev;
+ vtable_free(tmp);
+ }
+ dyna_pop_vtable(parser, &lvtbl->args);
+ dyna_pop_vtable(parser, &lvtbl->vars);
+}
+
+static void
+dyna_pop_gen(struct parser_params *parser, const struct vtable *lvargs)
+{
+ while (lvtbl->args != lvargs) {
+ dyna_pop_1(parser);
+ if (!lvtbl->args) {
+ struct local_vars *local = lvtbl->prev;
+ xfree(lvtbl);
+ lvtbl = local;
+ }
+ }
+ dyna_pop_1(parser);
+}
+
+static int
+dyna_in_block_gen(struct parser_params *parser)
+{
+ return POINTER_P(lvtbl->vars) && lvtbl->vars->prev != DVARS_TOPSCOPE;
+}
+
+static int
+dvar_defined_gen(struct parser_params *parser, ID id, int get)
+{
+ struct vtable *vars, *args, *used;
+ int i;
+
+ args = lvtbl->args;
+ vars = lvtbl->vars;
+ used = lvtbl->used;
+
+ while (POINTER_P(vars)) {
+ if (vtable_included(args, id)) {
+ return 1;
+ }
+ if ((i = vtable_included(vars, id)) != 0) {
+ if (used) used->tbl[i-1] |= LVAR_USED;
+ return 1;
+ }
+ args = args->prev;
+ vars = vars->prev;
+ if (get) used = 0;
+ if (used) used = used->prev;
+ }
+
+ if (vars == DVARS_INHERIT) {
+ return rb_dvar_defined(id);
+ }
+
+ return 0;
+}
+
+static int
+dvar_curr_gen(struct parser_params *parser, ID id)
+{
+ return (vtable_included(lvtbl->args, id) ||
+ vtable_included(lvtbl->vars, id));
+}
+
+#ifndef RIPPER
+static void
+reg_fragment_setenc_gen(struct parser_params* parser, VALUE str, int options)
+{
+ int c = RE_OPTION_ENCODING_IDX(options);
+
+ if (c) {
+ int opt, idx;
+ rb_char_to_option_kcode(c, &opt, &idx);
+ if (idx != ENCODING_GET(str) &&
+ rb_enc_str_coderange(str) != ENC_CODERANGE_7BIT) {
+ goto error;
+ }
+ ENCODING_SET(str, idx);
+ }
+ else if (RE_OPTION_ENCODING_NONE(options)) {
+ if (!ENCODING_IS_ASCII8BIT(str) &&
+ rb_enc_str_coderange(str) != ENC_CODERANGE_7BIT) {
+ c = 'n';
+ goto error;
+ }
+ rb_enc_associate(str, rb_ascii8bit_encoding());
+ }
+ else if (current_enc == rb_usascii_encoding()) {
+ if (rb_enc_str_coderange(str) != ENC_CODERANGE_7BIT) {
+ /* raise in re.c */
+ rb_enc_associate(str, rb_usascii_encoding());
+ }
+ else {
+ rb_enc_associate(str, rb_ascii8bit_encoding());
+ }
+ }
+ return;
+
+ error:
+ compile_error(PARSER_ARG
+ "regexp encoding option '%c' differs from source encoding '%s'",
+ c, rb_enc_name(rb_enc_get(str)));
+}
+
+static int
+reg_fragment_check_gen(struct parser_params* parser, VALUE str, int options)
+{
+ VALUE err;
+ reg_fragment_setenc(str, options);
+ err = rb_reg_check_preprocess(str);
+ if (err != Qnil) {
+ err = rb_obj_as_string(err);
+ compile_error(PARSER_ARG "%"PRIsVALUE, err);
+ return 0;
+ }
+ return 1;
+}
+
+typedef struct {
+ struct parser_params* parser;
+ rb_encoding *enc;
+ NODE *succ_block;
+ NODE *fail_block;
+ int num;
+} reg_named_capture_assign_t;
+
+static int
+reg_named_capture_assign_iter(const OnigUChar *name, const OnigUChar *name_end,
+ int back_num, int *back_refs, OnigRegex regex, void *arg0)
+{
+ reg_named_capture_assign_t *arg = (reg_named_capture_assign_t*)arg0;
+ struct parser_params* parser = arg->parser;
+ rb_encoding *enc = arg->enc;
+ long len = name_end - name;
+ const char *s = (const char *)name;
+ ID var;
+
+ arg->num++;
+
+ if (arg->succ_block == 0) {
+ arg->succ_block = NEW_BEGIN(0);
+ arg->fail_block = NEW_BEGIN(0);
+ }
+
+ if (!len || (*name != '_' && ISASCII(*name) && !rb_enc_islower(*name, enc)) ||
+ (len < MAX_WORD_LENGTH && rb_reserved_word(s, (int)len)) ||
+ !rb_enc_symname2_p(s, len, enc)) {
+ return ST_CONTINUE;
+ }
+ var = intern_cstr(s, len, enc);
+ if (dvar_defined(var) || local_id(var)) {
+ rb_warningV("named capture conflicts a local variable - %"PRIsVALUE,
+ rb_id2str(var));
+ }
+ arg->succ_block = block_append(arg->succ_block,
+ newline_node(node_assign(assignable(var,0),
+ NEW_CALL(
+ gettable(rb_intern("$~")),
+ idAREF,
+ NEW_LIST(NEW_LIT(ID2SYM(var))))
+ )));
+ arg->fail_block = block_append(arg->fail_block,
+ newline_node(node_assign(assignable(var,0), NEW_LIT(Qnil))));
+ return ST_CONTINUE;
+}
+
+static NODE *
+reg_named_capture_assign_gen(struct parser_params* parser, VALUE regexp, NODE *match)
+{
+ reg_named_capture_assign_t arg;
+
+ arg.parser = parser;
+ arg.enc = rb_enc_get(regexp);
+ arg.succ_block = 0;
+ arg.fail_block = 0;
+ arg.num = 0;
+ onig_foreach_name(RREGEXP(regexp)->ptr, reg_named_capture_assign_iter, &arg);
+
+ if (arg.num == 0)
+ return match;
+
+ return
+ block_append(
+ newline_node(match),
+ NEW_IF(gettable(rb_intern("$~")),
+ block_append(
+ newline_node(arg.succ_block),
+ newline_node(
+ NEW_CALL(
+ gettable(rb_intern("$~")),
+ rb_intern("begin"),
+ NEW_LIST(NEW_LIT(INT2FIX(0)))))),
+ block_append(
+ newline_node(arg.fail_block),
+ newline_node(
+ NEW_LIT(Qnil)))));
+}
+
+static VALUE
+parser_reg_compile(struct parser_params* parser, VALUE str, int options)
+{
+ reg_fragment_setenc(str, options);
+ return rb_reg_compile(str, options & RE_OPTION_MASK, ruby_sourcefile, ruby_sourceline);
+}
+
+static VALUE
+reg_compile_gen(struct parser_params* parser, VALUE str, int options)
+{
+ VALUE re;
+ VALUE err;
+
+ err = rb_errinfo();
+ re = parser_reg_compile(parser, str, options);
+ if (NIL_P(re)) {
+ VALUE m = rb_attr_get(rb_errinfo(), idMesg);
+ rb_set_errinfo(err);
+ if (!NIL_P(err)) {
+ rb_str_append(rb_str_cat(rb_attr_get(err, idMesg), "\n", 1), m);
+ }
+ else {
+ compile_error(PARSER_ARG "%"PRIsVALUE, m);
+ }
+ return Qnil;
+ }
+ return re;
+}
+
+VALUE
+rb_parser_reg_compile(struct parser_params* parser, VALUE str, int options, VALUE *errmsg)
+{
+ VALUE err = rb_errinfo();
+ VALUE re = parser_reg_compile(parser, str, options);
+ if (NIL_P(re)) {
+ *errmsg = rb_attr_get(rb_errinfo(), idMesg);
+ rb_set_errinfo(err);
+ }
+ return re;
+}
+
+NODE*
+rb_parser_append_print(VALUE vparser, NODE *node)
+{
+ NODE *prelude = 0;
+ NODE *scope = node;
+ struct parser_params *parser;
+
+ if (!node) return node;
+
+ TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
+
+ node = node->nd_body;
+
+ if (nd_type(node) == NODE_PRELUDE) {
+ prelude = node;
+ node = node->nd_body;
+ }
+
+ node = block_append(node,
+ NEW_FCALL(rb_intern("print"),
+ NEW_ARRAY(NEW_GVAR(rb_intern("$_")))));
+ if (prelude) {
+ prelude->nd_body = node;
+ scope->nd_body = prelude;
+ }
+ else {
+ scope->nd_body = node;
+ }
+
+ return scope;
+}
+
+NODE *
+rb_parser_while_loop(VALUE vparser, NODE *node, int chop, int split)
+{
+ NODE *prelude = 0;
+ NODE *scope = node;
+ struct parser_params *parser;
+
+ if (!node) return node;
+
+ TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
+
+ node = node->nd_body;
+
+ if (nd_type(node) == NODE_PRELUDE) {
+ prelude = node;
+ node = node->nd_body;
+ }
+ if (split) {
+ node = block_append(NEW_GASGN(rb_intern("$F"),
+ NEW_CALL(NEW_GVAR(rb_intern("$_")),
+ rb_intern("split"), 0)),
+ node);
+ }
+ if (chop) {
+ node = block_append(NEW_CALL(NEW_GVAR(rb_intern("$_")),
+ rb_intern("chop!"), 0), node);
+ }
+
+ node = NEW_OPT_N(node);
+
+ if (prelude) {
+ prelude->nd_body = node;
+ scope->nd_body = prelude;
+ }
+ else {
+ scope->nd_body = node;
+ }
+
+ return scope;
+}
+
+void
+rb_init_parse(void)
+{
+ /* just to suppress unused-function warnings */
+ (void)nodetype;
+ (void)nodeline;
+#if PARSER_DEBUG
+ (void)lex_state_name(-1);
+#endif
+}
+#endif /* !RIPPER */
+
+static ID
+internal_id_gen(struct parser_params *parser)
+{
+ ID id = (ID)vtable_size(lvtbl->args) + (ID)vtable_size(lvtbl->vars);
+ id += ((tLAST_TOKEN - ID_INTERNAL) >> ID_SCOPE_SHIFT) + 1;
+ return ID_STATIC_SYM | ID_INTERNAL | (id << ID_SCOPE_SHIFT);
+}
+
+static void
+parser_initialize(struct parser_params *parser)
+{
+ parser->eofp = Qfalse;
+
+ parser->parser_lex_strterm = 0;
+ parser->parser_cond_stack = 0;
+ parser->parser_cmdarg_stack = 0;
+ parser->parser_paren_nest = 0;
+ parser->parser_lpar_beg = 0;
+ parser->parser_brace_nest = 0;
+ parser->parser_in_single = 0;
+ parser->parser_in_def = 0;
+ parser->parser_in_defined = 0;
+ parser->parser_in_kwarg = 0;
+ parser->parser_compile_for_eval = 0;
+ parser->parser_tokenbuf = NULL;
+ parser->parser_tokidx = 0;
+ parser->parser_toksiz = 0;
+ parser->parser_heredoc_end = 0;
+ parser->parser_command_start = TRUE;
+ parser->parser_deferred_nodes = 0;
+ parser->parser_lex_pbeg = 0;
+ parser->parser_lex_p = 0;
+ parser->parser_lex_pend = 0;
+ parser->parser_lvtbl = 0;
+ parser->parser_ruby__end__seen = 0;
+ parser->parser_ruby_sourcefile = 0;
+ parser->parser_ruby_sourcefile_string = Qnil;
+ parser->cur_arg = 0;
+#ifndef RIPPER
+ parser->parser_eval_tree_begin = 0;
+ parser->parser_eval_tree = 0;
+#else
+ parser->delayed = Qnil;
+
+ parser->result = Qnil;
+ parser->parsing_thread = Qnil;
+ parser->toplevel_p = TRUE;
+ parser->error_p = FALSE;
+#endif
+#ifdef YYMALLOC
+ parser->heap = NULL;
+#endif
+ parser->enc = rb_utf8_encoding();
+}
+
+#ifdef RIPPER
+#define parser_mark ripper_parser_mark
+#define parser_free ripper_parser_free
+#endif
+
+static void
+parser_mark(void *ptr)
+{
+ struct parser_params *p = (struct parser_params*)ptr;
+
+ rb_gc_mark((VALUE)p->parser_lex_strterm);
+ rb_gc_mark((VALUE)p->parser_deferred_nodes);
+ rb_gc_mark(p->parser_lex_input);
+ rb_gc_mark(p->parser_lex_lastline);
+ rb_gc_mark(p->parser_lex_nextline);
+ rb_gc_mark(p->parser_ruby_sourcefile_string);
+#ifndef RIPPER
+ rb_gc_mark((VALUE)p->parser_eval_tree_begin) ;
+ rb_gc_mark((VALUE)p->parser_eval_tree) ;
+ rb_gc_mark(p->debug_lines);
+#else
+ rb_gc_mark(p->delayed);
+ rb_gc_mark(p->value);
+ rb_gc_mark(p->result);
+ rb_gc_mark(p->parsing_thread);
+#endif
+#ifdef YYMALLOC
+ rb_gc_mark((VALUE)p->heap);
+#endif
+}
+
+static void
+parser_free(void *ptr)
+{
+ struct parser_params *p = (struct parser_params*)ptr;
+ struct local_vars *local, *prev;
+
+ if (p->parser_tokenbuf) {
+ xfree(p->parser_tokenbuf);
+ }
+ for (local = p->parser_lvtbl; local; local = prev) {
+ if (local->vars) xfree(local->vars);
+ prev = local->prev;
+ xfree(local);
+ }
+ xfree(p);
+}
+
+static size_t
+parser_memsize(const void *ptr)
+{
+ struct parser_params *p = (struct parser_params*)ptr;
+ struct local_vars *local;
+ size_t size = sizeof(*p);
+
+ if (!ptr) return 0;
+ size += p->parser_toksiz;
+ for (local = p->parser_lvtbl; local; local = local->prev) {
+ size += sizeof(*local);
+ if (local->vars) size += local->vars->capa * sizeof(ID);
+ }
+ return size;
+}
+
+static const rb_data_type_t parser_data_type = {
+#ifndef RIPPER
+ "parser",
+#else
+ "ripper",
+#endif
+ {
+ parser_mark,
+ parser_free,
+ parser_memsize,
+ },
+ 0, 0, RUBY_TYPED_FREE_IMMEDIATELY
+};
+
+#ifndef RIPPER
+#undef rb_reserved_word
+
+const struct kwtable *
+rb_reserved_word(const char *str, unsigned int len)
+{
+ return reserved_word(str, len);
+}
+
+static struct parser_params *
+parser_new(void)
+{
+ struct parser_params *p;
+
+ p = ZALLOC(struct parser_params);
+ parser_initialize(p);
+ return p;
+}
+
+VALUE
+rb_parser_new(void)
+{
+ struct parser_params *p = parser_new();
+
+ return TypedData_Wrap_Struct(0, &parser_data_type, p);
+}
+#endif
+
+#ifdef RIPPER
+#define rb_parser_end_seen_p ripper_parser_end_seen_p
+#define rb_parser_encoding ripper_parser_encoding
+#define rb_parser_get_yydebug ripper_parser_get_yydebug
+#define rb_parser_set_yydebug ripper_parser_set_yydebug
+static VALUE ripper_parser_end_seen_p(VALUE vparser);
+static VALUE ripper_parser_encoding(VALUE vparser);
+static VALUE ripper_parser_get_yydebug(VALUE self);
+static VALUE ripper_parser_set_yydebug(VALUE self, VALUE flag);
+
+/*
+ * call-seq:
+ * ripper#error? -> Boolean
+ *
+ * Return true if parsed source has errors.
+ */
+static VALUE
+ripper_error_p(VALUE vparser)
+{
+ struct parser_params *parser;
+
+ TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
+ return parser->error_p ? Qtrue : Qfalse;
+}
+#endif
+
+/*
+ * call-seq:
+ * ripper#end_seen? -> Boolean
+ *
+ * Return true if parsed source ended by +\_\_END\_\_+.
+ */
+VALUE
+rb_parser_end_seen_p(VALUE vparser)
+{
+ struct parser_params *parser;
+
+ TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
+ return ruby__end__seen ? Qtrue : Qfalse;
+}
+
+/*
+ * call-seq:
+ * ripper#encoding -> encoding
+ *
+ * Return encoding of the source.
+ */
+VALUE
+rb_parser_encoding(VALUE vparser)
+{
+ struct parser_params *parser;
+
+ TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
+ return rb_enc_from_encoding(current_enc);
+}
+
+/*
+ * call-seq:
+ * ripper.yydebug -> true or false
+ *
+ * Get yydebug.
+ */
+VALUE
+rb_parser_get_yydebug(VALUE self)
+{
+ struct parser_params *parser;
+
+ TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
+ return yydebug ? Qtrue : Qfalse;
+}
+
+/*
+ * call-seq:
+ * ripper.yydebug = flag
+ *
+ * Set yydebug.
+ */
+VALUE
+rb_parser_set_yydebug(VALUE self, VALUE flag)
+{
+ struct parser_params *parser;
+
+ TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
+ yydebug = RTEST(flag);
+ return flag;
+}
+
+#ifndef RIPPER
+#ifdef YYMALLOC
+#define HEAPCNT(n, size) ((n) * (size) / sizeof(YYSTYPE))
+#define NEWHEAP() rb_node_newnode(NODE_ALLOCA, 0, (VALUE)parser->heap, 0)
+#define ADD2HEAP(n, c, p) ((parser->heap = (n))->u1.node = (p), \
+ (n)->u3.cnt = (c), (p))
+
+void *
+rb_parser_malloc(struct parser_params *parser, size_t size)
+{
+ size_t cnt = HEAPCNT(1, size);
+ NODE *n = NEWHEAP();
+ void *ptr = xmalloc(size);
+
+ return ADD2HEAP(n, cnt, ptr);
+}
+
+void *
+rb_parser_calloc(struct parser_params *parser, size_t nelem, size_t size)
+{
+ size_t cnt = HEAPCNT(nelem, size);
+ NODE *n = NEWHEAP();
+ void *ptr = xcalloc(nelem, size);
+
+ return ADD2HEAP(n, cnt, ptr);
+}
+
+void *
+rb_parser_realloc(struct parser_params *parser, void *ptr, size_t size)
+{
+ NODE *n;
+ size_t cnt = HEAPCNT(1, size);
+
+ if (ptr && (n = parser->heap) != NULL) {
+ do {
+ if (n->u1.node == ptr) {
+ n->u1.node = ptr = xrealloc(ptr, size);
+ if (n->u3.cnt) n->u3.cnt = cnt;
+ return ptr;
+ }
+ } while ((n = n->u2.node) != NULL);
+ }
+ n = NEWHEAP();
+ ptr = xrealloc(ptr, size);
+ return ADD2HEAP(n, cnt, ptr);
+}
+
+void
+rb_parser_free(struct parser_params *parser, void *ptr)
+{
+ NODE **prev = &parser->heap, *n;
+
+ while ((n = *prev) != NULL) {
+ if (n->u1.node == ptr) {
+ *prev = n->u2.node;
+ rb_gc_force_recycle((VALUE)n);
+ break;
+ }
+ prev = &n->u2.node;
+ }
+ xfree(ptr);
+}
+#endif
+#endif
+
+#ifdef RIPPER
+#ifdef RIPPER_DEBUG
+extern int rb_is_pointer_to_heap(VALUE);
+
+/* :nodoc: */
+static VALUE
+ripper_validate_object(VALUE self, VALUE x)
+{
+ if (x == Qfalse) return x;
+ if (x == Qtrue) return x;
+ if (x == Qnil) return x;
+ if (x == Qundef)
+ rb_raise(rb_eArgError, "Qundef given");
+ if (FIXNUM_P(x)) return x;
+ if (SYMBOL_P(x)) return x;
+ if (!rb_is_pointer_to_heap(x))
+ rb_raise(rb_eArgError, "invalid pointer: %p", x);
+ switch (BUILTIN_TYPE(x)) {
+ case T_STRING:
+ case T_OBJECT:
+ case T_ARRAY:
+ case T_BIGNUM:
+ case T_FLOAT:
+ case T_COMPLEX:
+ case T_RATIONAL:
+ return x;
+ case T_NODE:
+ if (nd_type(x) != NODE_RIPPER) {
+ rb_raise(rb_eArgError, "NODE given: %p", x);
+ }
+ return ((NODE *)x)->nd_rval;
+ default:
+ rb_raise(rb_eArgError, "wrong type of ruby object: %p (%s)",
+ x, rb_obj_classname(x));
+ }
+ return x;
+}
+#endif
+
+#define validate(x) ((x) = get_value(x))
+
+static VALUE
+ripper_dispatch0(struct parser_params *parser, ID mid)
+{
+ return rb_funcall(parser->value, mid, 0);
+}
+
+static VALUE
+ripper_dispatch1(struct parser_params *parser, ID mid, VALUE a)
+{
+ validate(a);
+ return rb_funcall(parser->value, mid, 1, a);
+}
+
+static VALUE
+ripper_dispatch2(struct parser_params *parser, ID mid, VALUE a, VALUE b)
+{
+ validate(a);
+ validate(b);
+ return rb_funcall(parser->value, mid, 2, a, b);
+}
+
+static VALUE
+ripper_dispatch3(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c)
+{
+ validate(a);
+ validate(b);
+ validate(c);
+ return rb_funcall(parser->value, mid, 3, a, b, c);
+}
+
+static VALUE
+ripper_dispatch4(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c, VALUE d)
+{
+ validate(a);
+ validate(b);
+ validate(c);
+ validate(d);
+ return rb_funcall(parser->value, mid, 4, a, b, c, d);
+}
+
+static VALUE
+ripper_dispatch5(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c, VALUE d, VALUE e)
+{
+ validate(a);
+ validate(b);
+ validate(c);
+ validate(d);
+ validate(e);
+ return rb_funcall(parser->value, mid, 5, a, b, c, d, e);
+}
+
+static VALUE
+ripper_dispatch7(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c, VALUE d, VALUE e, VALUE f, VALUE g)
+{
+ validate(a);
+ validate(b);
+ validate(c);
+ validate(d);
+ validate(e);
+ validate(f);
+ validate(g);
+ return rb_funcall(parser->value, mid, 7, a, b, c, d, e, f, g);
+}
+
+static const struct kw_assoc {
+ ID id;
+ const char *name;
+} keyword_to_name[] = {
+ {keyword_class, "class"},
+ {keyword_module, "module"},
+ {keyword_def, "def"},
+ {keyword_undef, "undef"},
+ {keyword_begin, "begin"},
+ {keyword_rescue, "rescue"},
+ {keyword_ensure, "ensure"},
+ {keyword_end, "end"},
+ {keyword_if, "if"},
+ {keyword_unless, "unless"},
+ {keyword_then, "then"},
+ {keyword_elsif, "elsif"},
+ {keyword_else, "else"},
+ {keyword_case, "case"},
+ {keyword_when, "when"},
+ {keyword_while, "while"},
+ {keyword_until, "until"},
+ {keyword_for, "for"},
+ {keyword_break, "break"},
+ {keyword_next, "next"},
+ {keyword_redo, "redo"},
+ {keyword_retry, "retry"},
+ {keyword_in, "in"},
+ {keyword_do, "do"},
+ {keyword_do_cond, "do"},
+ {keyword_do_block, "do"},
+ {keyword_return, "return"},
+ {keyword_yield, "yield"},
+ {keyword_super, "super"},
+ {keyword_self, "self"},
+ {keyword_nil, "nil"},
+ {keyword_true, "true"},
+ {keyword_false, "false"},
+ {keyword_and, "and"},
+ {keyword_or, "or"},
+ {keyword_not, "not"},
+ {modifier_if, "if"},
+ {modifier_unless, "unless"},
+ {modifier_while, "while"},
+ {modifier_until, "until"},
+ {modifier_rescue, "rescue"},
+ {keyword_alias, "alias"},
+ {keyword_defined, "defined?"},
+ {keyword_BEGIN, "BEGIN"},
+ {keyword_END, "END"},
+ {keyword__LINE__, "__LINE__"},
+ {keyword__FILE__, "__FILE__"},
+ {keyword__ENCODING__, "__ENCODING__"},
+ {0, NULL}
+};
+
+static const char*
+keyword_id_to_str(ID id)
+{
+ const struct kw_assoc *a;
+
+ for (a = keyword_to_name; a->id; a++) {
+ if (a->id == id)
+ return a->name;
+ }
+ return NULL;
+}
+
+#undef ripper_id2sym
+static VALUE
+ripper_id2sym(ID id)
+{
+ const char *name;
+ char buf[8];
+
+ if (id <= 256) {
+ buf[0] = (char)id;
+ buf[1] = '\0';
+ return ID2SYM(rb_intern2(buf, 1));
+ }
+ if ((name = keyword_id_to_str(id))) {
+ return ID2SYM(rb_intern(name));
+ }
+ if (!rb_id2str(id)) {
+ rb_bug("cannot convert ID to string: %ld", (unsigned long)id);
+ }
+ return ID2SYM(id);
+}
+
+static ID
+ripper_get_id(VALUE v)
+{
+ NODE *nd;
+ if (!RB_TYPE_P(v, T_NODE)) return 0;
+ nd = (NODE *)v;
+ if (nd_type(nd) != NODE_RIPPER) return 0;
+ return nd->nd_vid;
+}
+
+static VALUE
+ripper_get_value(VALUE v)
+{
+ NODE *nd;
+ if (v == Qundef) return Qnil;
+ if (!RB_TYPE_P(v, T_NODE)) return v;
+ nd = (NODE *)v;
+ if (nd_type(nd) != NODE_RIPPER) return Qnil;
+ return nd->nd_rval;
+}
+
+static void
+ripper_error_gen(struct parser_params *parser)
+{
+ parser->error_p = TRUE;
+}
+
+static void
+ripper_compile_error(struct parser_params *parser, const char *fmt, ...)
+{
+ VALUE str;
+ va_list args;
+
+ va_start(args, fmt);
+ str = rb_vsprintf(fmt, args);
+ va_end(args);
+ rb_funcall(parser->value, rb_intern("compile_error"), 1, str);
+ ripper_error_gen(parser);
+}
+
+static ID id_warn, id_warning;
+
+static void
+ripper_warn0(struct parser_params *parser, const char *fmt)
+{
+ rb_funcall(parser->value, id_warn, 1, STR_NEW2(fmt));
+}
+
+static void
+ripper_warnI(struct parser_params *parser, const char *fmt, int a)
+{
+ rb_funcall(parser->value, id_warn, 2,
+ STR_NEW2(fmt), INT2NUM(a));
+}
+
+static void
+ripper_warnS(struct parser_params *parser, const char *fmt, const char *str)
+{
+ rb_funcall(parser->value, id_warn, 2,
+ STR_NEW2(fmt), STR_NEW2(str));
+}
+
+static void
+ripper_warnV(struct parser_params *parser, const char *fmt, VALUE v)
+{
+ rb_funcall(parser->value, id_warn, 2,
+ STR_NEW2(fmt), v);
+}
+
+static void
+ripper_warning0(struct parser_params *parser, const char *fmt)
+{
+ rb_funcall(parser->value, id_warning, 1, STR_NEW2(fmt));
+}
+
+static void
+ripper_warningS(struct parser_params *parser, const char *fmt, const char *str)
+{
+ rb_funcall(parser->value, id_warning, 2,
+ STR_NEW2(fmt), STR_NEW2(str));
+}
+
+static void
+ripper_warningV(struct parser_params *parser, const char *fmt, VALUE v)
+{
+ rb_funcall(parser->value, id_warning, 2,
+ STR_NEW2(fmt), v);
+}
+
+static VALUE
+ripper_lex_get_generic(struct parser_params *parser, VALUE src)
+{
+ return rb_io_gets(src);
+}
+
+static VALUE
+ripper_s_allocate(VALUE klass)
+{
+ struct parser_params *p;
+ VALUE self;
+
+ p = ZALLOC(struct parser_params);
+ self = TypedData_Wrap_Struct(klass, &parser_data_type, p);
+ p->value = self;
+ return self;
+}
+
+#define ripper_initialized_p(r) ((r)->parser_lex_input != 0)
+
+/*
+ * call-seq:
+ * Ripper.new(src, filename="(ripper)", lineno=1) -> ripper
+ *
+ * Create a new Ripper object.
+ * _src_ must be a String, an IO, or an Object which has #gets method.
+ *
+ * This method does not starts parsing.
+ * See also Ripper#parse and Ripper.parse.
+ */
+static VALUE
+ripper_initialize(int argc, VALUE *argv, VALUE self)
+{
+ struct parser_params *parser;
+ VALUE src, fname, lineno;
+
+ TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
+ rb_scan_args(argc, argv, "12", &src, &fname, &lineno);
+ if (RB_TYPE_P(src, T_FILE)) {
+ parser->parser_lex_gets = ripper_lex_get_generic;
+ }
+ else {
+ StringValue(src);
+ parser->parser_lex_gets = lex_get_str;
+ }
+ parser->parser_lex_input = src;
+ parser->eofp = Qfalse;
+ if (NIL_P(fname)) {
+ fname = STR_NEW2("(ripper)");
+ OBJ_FREEZE(fname);
+ }
+ else {
+ StringValue(fname);
+ fname = rb_str_new_frozen(fname);
+ }
+ parser_initialize(parser);
+
+ parser->parser_ruby_sourcefile_string = fname;
+ parser->parser_ruby_sourcefile = RSTRING_PTR(fname);
+ parser->parser_ruby_sourceline = NIL_P(lineno) ? 0 : NUM2INT(lineno) - 1;
+
+ return Qnil;
+}
+
+struct ripper_args {
+ struct parser_params *parser;
+ int argc;
+ VALUE *argv;
+};
+
+static VALUE
+ripper_parse0(VALUE parser_v)
+{
+ struct parser_params *parser;
+
+ TypedData_Get_Struct(parser_v, struct parser_params, &parser_data_type, parser);
+ parser_prepare(parser);
+ ripper_yyparse((void*)parser);
+ return parser->result;
+}
+
+static VALUE
+ripper_ensure(VALUE parser_v)
+{
+ struct parser_params *parser;
+
+ TypedData_Get_Struct(parser_v, struct parser_params, &parser_data_type, parser);
+ parser->parsing_thread = Qnil;
+ return Qnil;
+}
+
+/*
+ * call-seq:
+ * ripper#parse
+ *
+ * Start parsing and returns the value of the root action.
+ */
+static VALUE
+ripper_parse(VALUE self)
+{
+ struct parser_params *parser;
+
+ TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
+ if (!ripper_initialized_p(parser)) {
+ rb_raise(rb_eArgError, "method called for uninitialized object");
+ }
+ if (!NIL_P(parser->parsing_thread)) {
+ if (parser->parsing_thread == rb_thread_current())
+ rb_raise(rb_eArgError, "Ripper#parse is not reentrant");
+ else
+ rb_raise(rb_eArgError, "Ripper#parse is not multithread-safe");
+ }
+ parser->parsing_thread = rb_thread_current();
+ rb_ensure(ripper_parse0, self, ripper_ensure, self);
+
+ return parser->result;
+}
+
+/*
+ * call-seq:
+ * ripper#column -> Integer
+ *
+ * Return column number of current parsing line.
+ * This number starts from 0.
+ */
+static VALUE
+ripper_column(VALUE self)
+{
+ struct parser_params *parser;
+ long col;
+
+ TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
+ if (!ripper_initialized_p(parser)) {
+ rb_raise(rb_eArgError, "method called for uninitialized object");
+ }
+ if (NIL_P(parser->parsing_thread)) return Qnil;
+ col = parser->tokp - parser->parser_lex_pbeg;
+ return LONG2NUM(col);
+}
+
+/*
+ * call-seq:
+ * ripper#filename -> String
+ *
+ * Return current parsing filename.
+ */
+static VALUE
+ripper_filename(VALUE self)
+{
+ struct parser_params *parser;
+
+ TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
+ if (!ripper_initialized_p(parser)) {
+ rb_raise(rb_eArgError, "method called for uninitialized object");
+ }
+ return parser->parser_ruby_sourcefile_string;
+}
+
+/*
+ * call-seq:
+ * ripper#lineno -> Integer
+ *
+ * Return line number of current parsing line.
+ * This number starts from 1.
+ */
+static VALUE
+ripper_lineno(VALUE self)
+{
+ struct parser_params *parser;
+
+ TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
+ if (!ripper_initialized_p(parser)) {
+ rb_raise(rb_eArgError, "method called for uninitialized object");
+ }
+ if (NIL_P(parser->parsing_thread)) return Qnil;
+ return INT2NUM(parser->parser_ruby_sourceline);
+}
+
+#ifdef RIPPER_DEBUG
+/* :nodoc: */
+static VALUE
+ripper_assert_Qundef(VALUE self, VALUE obj, VALUE msg)
+{
+ StringValue(msg);
+ if (obj == Qundef) {
+ rb_raise(rb_eArgError, "%"PRIsVALUE, msg);
+ }
+ return Qnil;
+}
+
+/* :nodoc: */
+static VALUE
+ripper_value(VALUE self, VALUE obj)
+{
+ return ULONG2NUM(obj);
+}
+#endif
+
+
+void
+Init_ripper(void)
+{
+ ripper_init_eventids1();
+ ripper_init_eventids2();
+ id_warn = rb_intern_const("warn");
+ id_warning = rb_intern_const("warning");
+
+ InitVM(ripper);
+}
+
+void
+InitVM_ripper(void)
+{
+ VALUE Ripper;
+
+ Ripper = rb_define_class("Ripper", rb_cObject);
+ /* version of Ripper */
+ rb_define_const(Ripper, "Version", rb_usascii_str_new2(RIPPER_VERSION));
+ rb_define_alloc_func(Ripper, ripper_s_allocate);
+ rb_define_method(Ripper, "initialize", ripper_initialize, -1);
+ rb_define_method(Ripper, "parse", ripper_parse, 0);
+ rb_define_method(Ripper, "column", ripper_column, 0);
+ rb_define_method(Ripper, "filename", ripper_filename, 0);
+ rb_define_method(Ripper, "lineno", ripper_lineno, 0);
+ rb_define_method(Ripper, "end_seen?", rb_parser_end_seen_p, 0);
+ rb_define_method(Ripper, "encoding", rb_parser_encoding, 0);
+ rb_define_method(Ripper, "yydebug", rb_parser_get_yydebug, 0);
+ rb_define_method(Ripper, "yydebug=", rb_parser_set_yydebug, 1);
+ rb_define_method(Ripper, "error?", ripper_error_p, 0);
+#ifdef RIPPER_DEBUG
+ rb_define_method(rb_mKernel, "assert_Qundef", ripper_assert_Qundef, 2);
+ rb_define_method(rb_mKernel, "rawVALUE", ripper_value, 1);
+ rb_define_method(rb_mKernel, "validate_object", ripper_validate_object, 1);
+#endif
+
+ ripper_init_eventids1_table(Ripper);
+ ripper_init_eventids2_table(Ripper);
+
+# if 0
+ /* Hack to let RDoc document SCRIPT_LINES__ */
+
+ /*
+ * When a Hash is assigned to +SCRIPT_LINES__+ the contents of files loaded
+ * after the assignment will be added as an Array of lines with the file
+ * name as the key.
+ */
+ rb_define_global_const("SCRIPT_LINES__", Qnil);
+#endif
+
+}
+#endif /* RIPPER */
+