[macruby-changes] [872] MacRuby/branches/experimental

source_changes at macosforge.org source_changes at macosforge.org
Wed Mar 11 14:33:19 PDT 2009


Revision: 872
          http://trac.macosforge.org/projects/ruby/changeset/872
Author:   lsansonetti at apple.com
Date:     2009-03-11 14:33:18 -0700 (Wed, 11 Mar 2009)
Log Message:
-----------
removed autogenerated files

Added Paths:
-----------
    MacRuby/branches/experimental/.cvsignore
    MacRuby/branches/experimental/.document

Removed Paths:
-------------
    MacRuby/branches/experimental/dtrace.h
    MacRuby/branches/experimental/include/ruby/config.h
    MacRuby/branches/experimental/miniprelude.c
    MacRuby/branches/experimental/prelude.c
    MacRuby/branches/experimental/rbconfig.rb
    MacRuby/branches/experimental/revision.h
    MacRuby/branches/experimental/y.tab.c

Added: MacRuby/branches/experimental/.cvsignore
===================================================================
--- MacRuby/branches/experimental/.cvsignore	                        (rev 0)
+++ MacRuby/branches/experimental/.cvsignore	2009-03-11 21:33:18 UTC (rev 872)
@@ -0,0 +1,52 @@
+*.bak
+*.orig
+*.rej
+*.sav
+*~
+.*.list
+.*.time
+.ccmalloc
+.ppack
+.ext
+.git
+.svn
+.pc
+COPYING.LIB
+ChangeLog.pre-alpha
+ChangeLog.pre1_1
+ChangeLog-1.8.0
+Makefile
+README.fat-patch
+README.v6
+README.atheos
+archive
+autom4te*.cache
+automake
+beos
+config.cache
+config.h
+config.h.in
+config.log
+config.status
+configure
+libruby.so.*
+miniruby
+newdate.rb
+newver.rb
+parse.c
+patches
+patches-master
+pitest.rb
+ppack
+preview
+rbconfig.rb
+rename2.h
+repack
+riscos
+rubicon
+ruby
+ruby-man.rd.gz
+tmp
+web
+y.output
+y.tab.c

Added: MacRuby/branches/experimental/.document
===================================================================
--- MacRuby/branches/experimental/.document	                        (rev 0)
+++ MacRuby/branches/experimental/.document	2009-03-11 21:33:18 UTC (rev 872)
@@ -0,0 +1,16 @@
+# This file determines which files in the
+# Ruby hierarchy will be processed by the RDoc
+# tool when it is given the top-level directory
+# as an argument
+
+# Process all the C source files
+*.c
+
+# the lib/ directory (which has its own .document file)
+
+lib
+
+
+# and some of the ext/ directory (which has its own .document file)
+
+ext

Deleted: MacRuby/branches/experimental/dtrace.h
===================================================================
--- MacRuby/branches/experimental/dtrace.h	2009-03-11 21:14:13 UTC (rev 871)
+++ MacRuby/branches/experimental/dtrace.h	2009-03-11 21:33:18 UTC (rev 872)
@@ -1,85 +0,0 @@
-/*
- * Generated by dtrace(1M).
- */
-
-#ifndef	_NEW_DTRACE_H
-#define	_NEW_DTRACE_H
-
-#include <unistd.h>
-
-#ifdef	__cplusplus
-extern "C" {
-#endif
-
-#define MACRUBY_STABILITY "___dtrace_stability$macruby$v1$1_1_0_1_1_0_1_1_0_1_1_0_1_1_0"
-
-#define MACRUBY_TYPEDEFS "___dtrace_typedefs$macruby$v1"
-
-#define	MACRUBY_INSN_ENTRY(arg0, arg1, arg2) \
-{ \
-	__asm__ volatile(".reference " MACRUBY_TYPEDEFS); \
-	__dtrace_probe$macruby$insn__entry$v1$63686172202a$63686172202a$696e74(arg0, arg1, arg2); \
-	__asm__ volatile(".reference " MACRUBY_STABILITY); \
-} 
-#define	MACRUBY_INSN_ENTRY_ENABLED() \
-	__dtrace_isenabled$macruby$insn__entry$v1()
-#define	MACRUBY_INSN_RETURN(arg0, arg1, arg2) \
-{ \
-	__asm__ volatile(".reference " MACRUBY_TYPEDEFS); \
-	__dtrace_probe$macruby$insn__return$v1$63686172202a$63686172202a$696e74(arg0, arg1, arg2); \
-	__asm__ volatile(".reference " MACRUBY_STABILITY); \
-} 
-#define	MACRUBY_INSN_RETURN_ENABLED() \
-	__dtrace_isenabled$macruby$insn__return$v1()
-#define	MACRUBY_METHOD_ENTRY(arg0, arg1, arg2, arg3) \
-{ \
-	__asm__ volatile(".reference " MACRUBY_TYPEDEFS); \
-	__dtrace_probe$macruby$method__entry$v1$63686172202a$63686172202a$63686172202a$696e74(arg0, arg1, arg2, arg3); \
-	__asm__ volatile(".reference " MACRUBY_STABILITY); \
-} 
-#define	MACRUBY_METHOD_ENTRY_ENABLED() \
-	__dtrace_isenabled$macruby$method__entry$v1()
-#define	MACRUBY_METHOD_RETURN(arg0, arg1, arg2, arg3) \
-{ \
-	__asm__ volatile(".reference " MACRUBY_TYPEDEFS); \
-	__dtrace_probe$macruby$method__return$v1$63686172202a$63686172202a$63686172202a$696e74(arg0, arg1, arg2, arg3); \
-	__asm__ volatile(".reference " MACRUBY_STABILITY); \
-} 
-#define	MACRUBY_METHOD_RETURN_ENABLED() \
-	__dtrace_isenabled$macruby$method__return$v1()
-#define	MACRUBY_RAISE(arg0, arg1, arg2) \
-{ \
-	__asm__ volatile(".reference " MACRUBY_TYPEDEFS); \
-	__dtrace_probe$macruby$raise$v1$63686172202a$63686172202a$696e74(arg0, arg1, arg2); \
-	__asm__ volatile(".reference " MACRUBY_STABILITY); \
-} 
-#define	MACRUBY_RAISE_ENABLED() \
-	__dtrace_isenabled$macruby$raise$v1()
-#define	MACRUBY_RESCUE(arg0, arg1) \
-{ \
-	__asm__ volatile(".reference " MACRUBY_TYPEDEFS); \
-	__dtrace_probe$macruby$rescue$v1$63686172202a$696e74(arg0, arg1); \
-	__asm__ volatile(".reference " MACRUBY_STABILITY); \
-} 
-#define	MACRUBY_RESCUE_ENABLED() \
-	__dtrace_isenabled$macruby$rescue$v1()
-
-
-extern void __dtrace_probe$macruby$insn__entry$v1$63686172202a$63686172202a$696e74(char *, char *, int);
-extern int __dtrace_isenabled$macruby$insn__entry$v1(void);
-extern void __dtrace_probe$macruby$insn__return$v1$63686172202a$63686172202a$696e74(char *, char *, int);
-extern int __dtrace_isenabled$macruby$insn__return$v1(void);
-extern void __dtrace_probe$macruby$method__entry$v1$63686172202a$63686172202a$63686172202a$696e74(char *, char *, char *, int);
-extern int __dtrace_isenabled$macruby$method__entry$v1(void);
-extern void __dtrace_probe$macruby$method__return$v1$63686172202a$63686172202a$63686172202a$696e74(char *, char *, char *, int);
-extern int __dtrace_isenabled$macruby$method__return$v1(void);
-extern void __dtrace_probe$macruby$raise$v1$63686172202a$63686172202a$696e74(char *, char *, int);
-extern int __dtrace_isenabled$macruby$raise$v1(void);
-extern void __dtrace_probe$macruby$rescue$v1$63686172202a$696e74(char *, int);
-extern int __dtrace_isenabled$macruby$rescue$v1(void);
-
-#ifdef	__cplusplus
-}
-#endif
-
-#endif	/* _NEW_DTRACE_H */

Deleted: MacRuby/branches/experimental/include/ruby/config.h
===================================================================
--- MacRuby/branches/experimental/include/ruby/config.h	2009-03-11 21:14:13 UTC (rev 871)
+++ MacRuby/branches/experimental/include/ruby/config.h	2009-03-11 21:33:18 UTC (rev 872)
@@ -1,249 +0,0 @@
-#define PACKAGE_NAME ""
-#define PACKAGE_TARNAME ""
-#define PACKAGE_VERSION ""
-#define PACKAGE_STRING ""
-#define PACKAGE_BUGREPORT ""
-#define NEXT_FAT_BINARY 1
-#define USE_BUILTIN_FRAME_ADDRESS 1
-#define _GNU_SOURCE 1
-#define STDC_HEADERS 1
-#define HAVE_SYS_TYPES_H 1
-#define HAVE_SYS_STAT_H 1
-#define HAVE_STDLIB_H 1
-#define HAVE_STRING_H 1
-#define HAVE_MEMORY_H 1
-#define HAVE_STRINGS_H 1
-#define HAVE_INTTYPES_H 1
-#define HAVE_STDINT_H 1
-#define HAVE_UNISTD_H 1
-#define __EXTENSIONS__ 1
-#define _POSIX_PTHREAD_SEMANTICS 1
-#define _TANDEM_SOURCE 1
-#define HAVE_LONG_LONG 1
-#define HAVE_OFF_T 1
-#define SIZEOF___INT64 0
-#if defined(__LP64__)
-#define SIZEOF_INT 4
-#define SIZEOF_SHORT 2
-#define SIZEOF_LONG 8
-#define SIZEOF_LONG_LONG 8
-#define SIZEOF_OFF_T 8
-#define SIZEOF_VOIDP 8
-#define SIZEOF_FLOAT 4
-#define SIZEOF_DOUBLE 8
-#define SIZEOF_TIME_T 8
-#define SIZEOF_RLIM_T 8
-#define SIZEOF_SIZE_T 8
-#else
-#define SIZEOF_INT 4
-#define SIZEOF_SHORT 2
-#define SIZEOF_LONG 4
-#define SIZEOF_LONG_LONG 8
-#define SIZEOF_OFF_T 8
-#define SIZEOF_VOIDP 4
-#define SIZEOF_FLOAT 4
-#define SIZEOF_DOUBLE 8
-#define SIZEOF_TIME_T 4
-#define SIZEOF_RLIM_T 8
-#define SIZEOF_SIZE_T 4
-#endif
-#define rb_pid_t pid_t
-#define PIDT2NUM(v) LONG2NUM(v)
-#define NUM2PIDT(v) NUM2LONG(v)
-#define rb_uid_t uid_t
-#define UIDT2NUM(v) ULONG2NUM(v)
-#define NUM2UIDT(v) NUM2ULONG(v)
-#define rb_gid_t gid_t
-#define GIDT2NUM(v) ULONG2NUM(v)
-#define NUM2GIDT(v) NUM2ULONG(v)
-#define HAVE_PROTOTYPES 1
-#define TOKEN_PASTE(x,y) x##y
-#define STRINGIZE(expr) STRINGIZE0(expr)
-#define HAVE_STDARG_PROTOTYPES 1
-#define NORETURN(x) __attribute__ ((noreturn)) x
-#define DEPRECATED(x) __attribute__ ((deprecated)) x
-#define NOINLINE(x) __attribute__ ((noinline)) x
-#define HAVE_DECL_SYS_NERR 1
-#define HAVE_LIBDL 1
-#define HAVE_DIRENT_H 1
-#define STDC_HEADERS 1
-#define HAVE_SYS_WAIT_H 1
-#define HAVE_STDLIB_H 1
-#define HAVE_STRING_H 1
-#define HAVE_UNISTD_H 1
-#define HAVE_LIMITS_H 1
-#define HAVE_SYS_FILE_H 1
-#define HAVE_SYS_IOCTL_H 1
-#define HAVE_SYS_SYSCALL_H 1
-#define HAVE_FCNTL_H 1
-#define HAVE_SYS_FCNTL_H 1
-#define HAVE_SYS_SELECT_H 1
-#define HAVE_SYS_TIME_H 1
-#define HAVE_SYS_TIMES_H 1
-#define HAVE_SYS_PARAM_H 1
-#define HAVE_PWD_H 1
-#define HAVE_GRP_H 1
-#define HAVE_UTIME_H 1
-#define HAVE_MEMORY_H 1
-#define HAVE_SYS_RESOURCE_H 1
-#define HAVE_NETINET_IN_SYSTM_H 1
-#define HAVE_FLOAT_H 1
-#define HAVE_PTHREAD_H 1
-#define HAVE_UCONTEXT_H 1
-#define HAVE_LANGINFO_H 1
-#define HAVE_LOCALE_H 1
-#define HAVE_TIME_H 1
-#define HAVE_STRUCT_STAT_ST_BLKSIZE 1
-#define HAVE_ST_BLKSIZE 1
-#define HAVE_STRUCT_STAT_ST_BLOCKS 1
-#define HAVE_ST_BLOCKS 1
-#define HAVE_STRUCT_STAT_ST_RDEV 1
-#define HAVE_ST_RDEV 1
-#define HAVE_STRUCT_STAT_ST_ATIMESPEC 1
-#define HAVE_STRUCT_STAT_ST_MTIMESPEC 1
-#define HAVE_STRUCT_STAT_ST_CTIMESPEC 1
-#define HAVE_STRUCT_TIMESPEC 1
-#define HAVE_RB_FD_INIT 1
-#define HAVE_INT8_T 1
-#define HAVE_UINT8_T 1
-#define HAVE_INT16_T 1
-#define HAVE_UINT16_T 1
-#define HAVE_INT32_T 1
-#define HAVE_UINT32_T 1
-#define HAVE_INT64_T 1
-#define HAVE_UINT64_T 1
-#define HAVE_INTPTR_T 1
-#define HAVE_UINTPTR_T 1
-#define HAVE_SSIZE_T 1
-#define GETGROUPS_T gid_t
-#define RETSIGTYPE void
-#define HAVE_ALLOCA_H 1
-#define HAVE_ALLOCA 1
-#define HAVE_DUP2 1
-#define HAVE_MEMMOVE 1
-#define HAVE_STRERROR 1
-#define HAVE_STRFTIME 1
-#define HAVE_STRCHR 1
-#define HAVE_STRSTR 1
-#define HAVE_CRYPT 1
-#define HAVE_FLOCK 1
-#define HAVE_VSNPRINTF 1
-#define HAVE_ISNAN 1
-#define HAVE_FINITE 1
-#define HAVE_ISINF 1
-#define HAVE_HYPOT 1
-#define HAVE_ACOSH 1
-#define HAVE_ERF 1
-#define HAVE_TGAMMA 1
-#define HAVE_CBRT 1
-#define HAVE_STRLCPY 1
-#define HAVE_STRLCAT 1
-#define HAVE_FMOD 1
-#define HAVE_KILLPG 1
-#define HAVE_WAIT4 1
-#define HAVE_WAITPID 1
-#define HAVE_FORK 1
-#define HAVE_SYSCALL 1
-#define HAVE_CHROOT 1
-#define HAVE_FSYNC 1
-#define HAVE_GETCWD 1
-#define HAVE_TRUNCATE 1
-#define HAVE_FTRUNCATE 1
-#define HAVE_TIMES 1
-#define HAVE_UTIMES 1
-#define HAVE_FCNTL 1
-#define HAVE_LOCKF 1
-#define HAVE_LSTAT 1
-#define HAVE_LINK 1
-#define HAVE_SYMLINK 1
-#define HAVE_READLINK 1
-#define HAVE_SETITIMER 1
-#define HAVE_SETRUID 1
-#define HAVE_SETEUID 1
-#define HAVE_SETREUID 1
-#define HAVE_SOCKETPAIR 1
-#define HAVE_SETRGID 1
-#define HAVE_SETEGID 1
-#define HAVE_SETREGID 1
-#define HAVE_ISSETUGID 1
-#define HAVE_PAUSE 1
-#define HAVE_LCHOWN 1
-#define HAVE_LCHMOD 1
-#define HAVE_GETPGRP 1
-#define HAVE_SETPGRP 1
-#define HAVE_GETPGID 1
-#define HAVE_SETPGID 1
-#define HAVE_INITGROUPS 1
-#define HAVE_GETGROUPS 1
-#define HAVE_SETGROUPS 1
-#define HAVE_GETPRIORITY 1
-#define HAVE_GETRLIMIT 1
-#define HAVE_SETRLIMIT 1
-#define HAVE_SYSCONF 1
-#define HAVE_DLOPEN 1
-#define HAVE_SIGPROCMASK 1
-#define HAVE_SIGACTION 1
-#define HAVE_SIGSETJMP 1
-#define HAVE__SETJMP 1
-#define HAVE__LONGJMP 1
-#define HAVE_VSNPRINTF 1
-#define HAVE_SNPRINTF 1
-#define HAVE_SETSID 1
-#define HAVE_TELLDIR 1
-#define HAVE_SEEKDIR 1
-#define HAVE_FCHMOD 1
-#define HAVE_COSH 1
-#define HAVE_SINH 1
-#define HAVE_TANH 1
-#define HAVE_LOG2 1
-#define HAVE_ROUND 1
-#define HAVE_SETUID 1
-#define HAVE_SETGID 1
-#define HAVE_DAEMON 1
-#define HAVE_SETENV 1
-#define HAVE_UNSETENV 1
-#define HAVE_MKTIME 1
-#define HAVE_TIMEGM 1
-#define HAVE_GETTIMEOFDAY 1
-#define HAVE_PREAD 1
-#define HAVE_SENDFILE 1
-#define RUBY_SETJMP(env) _setjmp(env)
-#define RUBY_LONGJMP(env,val) _longjmp(env,val)
-#define RUBY_JMP_BUF jmp_buf
-#define HAVE_STRUCT_TM_TM_ZONE 1
-#define HAVE_TM_ZONE 1
-#define HAVE_STRUCT_TM_TM_GMTOFF 1
-#define HAVE_DAYLIGHT 1
-#define HAVE_VAR_TIMEZONE 1
-#define TYPEOF_VAR_TIMEZONE long
-#define NEGATIVE_TIME_T 1
-#define POSIX_SIGNAL 1
-#define GETPGRP_VOID 1
-#define SETPGRP_VOID 1
-#define RSHIFT(x,y) ((x)>>(int)y)
-#define FILE_COUNT _r
-#define FILE_READPTR _p
-#define HAVE__SC_CLK_TCK 1
-#define STACK_GROW_DIRECTION -1
-#define _REENTRANT 1
-#define _THREAD_SAFE 1
-#define HAVE_LIBPTHREAD 1
-#define HAVE_NANOSLEEP 1
-#define HAVE_GETCONTEXT 1
-#define HAVE_SETCONTEXT 1
-#define HAVE_BACKTRACE 1
-#define DLEXT_MAXLEN 7
-#define DLEXT ".bundle"
-
-#define HAVE_BRIDGESUPPORT_FRAMEWORK 0
-#define HAVE_AUTO_ZONE_H 0
-#define ENABLE_DEBUG_LOGGING 1
-#define RUBY_PLATFORM "universal-darwin9.5"
-#define RUBY_LIB "/Library/Frameworks/MacRuby.framework/Versions/0.5/usr/lib/ruby/1.9.0"
-#define RUBY_ARCHLIB "/Library/Frameworks/MacRuby.framework/Versions/0.5/usr/lib/ruby/1.9.0/universal-darwin9.5"
-#define RUBY_SITE_LIB "/Library/Frameworks/MacRuby.framework/Versions/0.5/usr/lib/ruby/site_ruby"
-#define RUBY_SITE_LIB2 "/Library/Frameworks/MacRuby.framework/Versions/0.5/usr/lib/ruby/site_ruby/1.9.0"
-#define RUBY_SITE_ARCHLIB "/Library/Frameworks/MacRuby.framework/Versions/0.5/usr/lib/ruby/site_ruby/1.9.0/universal-darwin9.5"
-#define RUBY_VENDOR_LIB "/Library/Frameworks/MacRuby.framework/Versions/0.5/usr/lib/ruby/vendor_ruby"
-#define RUBY_VENDOR_LIB2 "/Library/Frameworks/MacRuby.framework/Versions/0.5/usr/lib/ruby/vendor_ruby/1.9.0"
-#define RUBY_VENDOR_ARCHLIB "/Library/Frameworks/MacRuby.framework/Versions/0.5/usr/lib/ruby/vendor_ruby/1.9.0/universal-darwin9.5"

Deleted: MacRuby/branches/experimental/miniprelude.c
===================================================================
--- MacRuby/branches/experimental/miniprelude.c	2009-03-11 21:14:13 UTC (rev 871)
+++ MacRuby/branches/experimental/miniprelude.c	2009-03-11 21:33:18 UTC (rev 872)
@@ -1,52 +0,0 @@
-#include "ruby/ruby.h"
-#include "ruby/node.h"
-#include "roxor.h"
-
-static const char prelude_name0[] = "prelude.rb";
-static const char prelude_code0[] =
-"\n"
-"# Mutex\n"
-"\n"
-"class Mutex\n"
-"  def synchronize\n"
-"    self.lock\n"
-"    begin\n"
-"      yield\n"
-"    ensure\n"
-"      self.unlock rescue nil\n"
-"    end\n"
-"  end\n"
-"end\n"
-"\n"
-"# Thread\n"
-"\n"
-"class Thread\n"
-"  MUTEX_FOR_THREAD_EXCLUSIVE = Mutex.new\n"
-"  def self.exclusive\n"
-"    MUTEX_FOR_THREAD_EXCLUSIVE.synchronize{\n"
-"      yield\n"
-"    }\n"
-"  end\n"
-"end\n"
-"\n"
-"def require_relative(relative_feature)\n"
-"  c = caller.first\n"
-"  e = c.rindex(/:\\d+:in /)\n"
-"  file = $`\n"
-"  if /\\A\\((.*)\\)/ =~ file # eval, etc.\n"
-"    raise LoadError, \"require_relative is called in #{$1}\"\n"
-"  end\n"
-"  absolute_feature = File.expand_path(File.join(File.dirname(file), relative_feature))\n"
-"  require absolute_feature\n"
-"end\n"
-;
-
-void
-Init_prelude(void)
-{
-  rb_vm_run_node(prelude_name0, rb_compile_string(
-    prelude_name0,
-    rb_str_new(prelude_code0, sizeof(prelude_code0) - 1),
-    1));
-
-}

Deleted: MacRuby/branches/experimental/rbconfig.rb
===================================================================
--- MacRuby/branches/experimental/rbconfig.rb	2009-03-11 21:14:13 UTC (rev 871)
+++ MacRuby/branches/experimental/rbconfig.rb	2009-03-11 21:33:18 UTC (rev 872)
@@ -1,191 +0,0 @@
-# This file was created when MacRuby was built.  Any changes made to this file 
-# will be lost the next time MacRuby is built.
-
-module RbConfig
-  RUBY_VERSION == "1.9.0" or
-    raise "ruby lib version (1.9.0) doesn't match executable version (#{RUBY_VERSION})"
-
-  TOPDIR = File.dirname(__FILE__).chomp!("/lib/ruby/1.9.0/universal-darwin9.5")
-  DESTDIR = '' unless defined? DESTDIR
-  CONFIG = {}
-  CONFIG["DESTDIR"] = DESTDIR
-  CONFIG["INSTALL"] = '/usr/bin/install -c'
-  CONFIG["prefix"] = (TOPDIR || DESTDIR + "/Library/Frameworks/MacRuby.framework/Versions/0.5/usr")
-  CONFIG["EXEEXT"] = ""
-  CONFIG["ruby_install_name"] = "macruby"
-  CONFIG["RUBY_INSTALL_NAME"] = "macruby"
-  CONFIG["RUBY_SO_NAME"] = "macruby"
-  CONFIG["SHELL"] = "/bin/sh"
-  CONFIG["PATH_SEPARATOR"] = ":"
-  CONFIG["PACKAGE_NAME"] = ""
-  CONFIG["PACKAGE_TARNAME"] = ""
-  CONFIG["PACKAGE_VERSION"] = ""
-  CONFIG["PACKAGE_STRING"] = ""
-  CONFIG["PACKAGE_BUGREPORT"] = ""
-  CONFIG["exec_prefix"] = "$(prefix)"
-  CONFIG["bindir"] = "$(exec_prefix)/bin"
-  CONFIG["sbindir"] = "$(exec_prefix)/sbin"
-  CONFIG["libexecdir"] = "$(exec_prefix)/libexec"
-  CONFIG["datarootdir"] = "$(prefix)/share"
-  CONFIG["datadir"] = "$(datarootdir)"
-  CONFIG["sysconfdir"] = "$(prefix)/etc"
-  CONFIG["sharedstatedir"] = "$(prefix)/com"
-  CONFIG["localstatedir"] = "$(prefix)/var"
-  CONFIG["includedir"] = "$(prefix)/include"
-  CONFIG["oldincludedir"] = "/usr/include"
-  CONFIG["docdir"] = "$(datarootdir)/doc/$(PACKAGE)"
-  CONFIG["infodir"] = "$(datarootdir)/info"
-  CONFIG["htmldir"] = "$(docdir)"
-  CONFIG["dvidir"] = "$(docdir)"
-  CONFIG["pdfdir"] = "$(docdir)"
-  CONFIG["psdir"] = "$(docdir)"
-  CONFIG["libdir"] = "$(exec_prefix)/lib"
-  CONFIG["localedir"] = "$(datarootdir)/locale"
-  CONFIG["mandir"] = "$(datarootdir)/man"
-  CONFIG["DEFS"] = ""
-  CONFIG["ECHO_C"] = "\\\\c"
-  CONFIG["ECHO_N"] = ""
-  CONFIG["ECHO_T"] = ""
-  CONFIG["LIBS"] = ""
-  CONFIG["build_alias"] = ""
-  CONFIG["host_alias"] = ""
-  CONFIG["target_alias"] = ""
-  CONFIG["BASERUBY"] = "ruby"
-  CONFIG["MAJOR"], CONFIG["MINOR"], CONFIG["TEENY"] = ["1", "9", "0"]
-  CONFIG["build"] = "i686-apple-darwin9.0.0"
-  CONFIG["build_cpu"] = "i686"
-  CONFIG["build_vendor"] = "apple"
-  CONFIG["build_os"] = "darwin9.0.0"
-  CONFIG["host"] = "i686-apple-darwin9.0.0"
-  CONFIG["host_cpu"] = "i686"
-  CONFIG["host_vendor"] = "apple"
-  CONFIG["host_os"] = "darwin9.0.0"
-  CONFIG["target"] = "i686-apple-darwin9.0.0"
-  CONFIG["target_cpu"] = "i686"
-  CONFIG["target_vendor"] = "apple"
-  CONFIG["target_os"] = "darwin9.0"
-  CONFIG["CC"] = "gcc"
-  CONFIG["CFLAGS"] = "-fno-common -pipe $(cflags)"
-  CONFIG["LDFLAGS"] = ""
-  CONFIG["CPPFLAGS"] = "$(cppflags)"
-  CONFIG["OBJEXT"] = "o"
-  CONFIG["CXX"] = "g++"
-  CONFIG["CXXFLAGS"] = ""
-  CONFIG["CPP"] = "gcc -E"
-  CONFIG["GREP"] = "/usr/bin/grep"
-  CONFIG["EGREP"] = "/usr/bin/grep -E"
-  CONFIG["GNU_LD"] = "no"
-  CONFIG["CPPOUTFILE"] = "-o conftest.i"
-  CONFIG["OUTFLAG"] = "-o "
-  CONFIG["COUTFLAG"] = "-o "
-  CONFIG["RANLIB"] = "ranlib"
-  CONFIG["AR"] = "ar"
-  CONFIG["AS"] = "as"
-  CONFIG["ASFLAGS"] = ""
-  CONFIG["NM"] = ""
-  CONFIG["WINDRES"] = ""
-  CONFIG["DLLWRAP"] = ""
-  CONFIG["OBJDUMP"] = ""
-  CONFIG["LN_S"] = "ln -s"
-  CONFIG["SET_MAKE"] = ""
-  CONFIG["INSTALL_PROGRAM"] = "$(INSTALL)"
-  CONFIG["INSTALL_SCRIPT"] = "$(INSTALL)"
-  CONFIG["INSTALL_DATA"] = "$(INSTALL) -m 644"
-  CONFIG["RM"] = "rm -f"
-  CONFIG["CP"] = "cp"
-  CONFIG["MAKEDIRS"] = "mkdir -p"
-  CONFIG["ALLOCA"] = ""
-  CONFIG["DLDFLAGS"] = ""
-  CONFIG["ARCH_FLAG"] = "-arch i386 -arch x86_64"
-  CONFIG["STATIC"] = ""
-  CONFIG["CCDLFLAGS"] = "-fno-common"
-  CONFIG["LDSHARED"] = "$(CC) -dynamic -bundle -undefined suppress -flat_namespace -arch i386 -arch x86_64"
-  CONFIG["LDSHAREDXX"] = "$(CXX) -dynamic -bundle -undefined suppress -flat_namespace"
-  CONFIG["DLEXT"] = "bundle"
-  CONFIG["DLEXT2"] = ""
-  CONFIG["LIBEXT"] = "a"
-  CONFIG["LINK_SO"] = ""
-  CONFIG["LIBPATHFLAG"] = " -L%s"
-  CONFIG["RPATHFLAG"] = ""
-  CONFIG["LIBPATHENV"] = "DYLD_LIBRARY_PATH"
-  CONFIG["TRY_LINK"] = ""
-  CONFIG["STRIP"] = "strip -A -n"
-  CONFIG["EXTSTATIC"] = ""
-  CONFIG["setup"] = "Setup"
-  CONFIG["PREP"] = "miniruby$(EXEEXT)"
-  CONFIG["EXTOUT"] = ".ext"
-  CONFIG["ARCHFILE"] = ""
-  CONFIG["RDOCTARGET"] = "install-doc"
-  CONFIG["cppflags"] = ""
-  CONFIG["cflags"] = "$(optflags) $(debugflags) $(warnflags)"
-  CONFIG["optflags"] = "-O2"
-  CONFIG["debugflags"] = "-g"
-  CONFIG["warnflags"] = "-Wall -Wno-parentheses"
-  CONFIG["LIBRUBY_LDSHARED"] = "gcc -dynamiclib -undefined suppress -flat_namespace"
-  CONFIG["LIBRUBY_DLDFLAGS"] = "-install_name $(libdir)/lib$(RUBY_SO_NAME).dylib -current_version $(MAJOR).$(MINOR).$(TEENY) -compatibility_version $(MAJOR).$(MINOR)"
-  CONFIG["rubyw_install_name"] = ""
-  CONFIG["RUBYW_INSTALL_NAME"] = ""
-  CONFIG["LIBRUBY_A"] = "lib$(RUBY_SO_NAME)-static.a"
-  CONFIG["LIBRUBY_SO"] = "lib$(RUBY_SO_NAME).$(MAJOR).$(MINOR).$(TEENY).dylib"
-  CONFIG["LIBRUBY_ALIASES"] = "lib$(RUBY_SO_NAME).$(MAJOR).$(MINOR).dylib lib$(RUBY_SO_NAME).dylib"
-  CONFIG["LIBRUBY"] = "$(LIBRUBY_SO)"
-  CONFIG["LIBRUBYARG"] = "$(LIBRUBYARG_SHARED)"
-  CONFIG["LIBRUBYARG_STATIC"] = "-l$(RUBY_SO_NAME)-static -L/usr/local/lib  -lpthread -lm /usr/local/lib/LLVMX86CodeGen.o -lLLVMSelectionDAG -lLLVMAsmPrinter /usr/local/lib/LLVMExecutionEngine.o /usr/local/lib/LLVMJIT.o -lLLVMCodeGen -lLLVMScalarOpts -lLLVMTransformUtils -lLLVMipa -lLLVMAnalysis -lLLVMTarget -lLLVMCore -lLLVMSupport -lLLVMSystem -lpthread -ldl -lxml2 -lobjc -lffi -lauto -framework Foundation"
-  CONFIG["LIBRUBYARG_SHARED"] = "-l$(RUBY_SO_NAME)"
-  CONFIG["SOLIBS"] = ""
-  CONFIG["DLDLIBS"] = ""
-  CONFIG["ENABLE_SHARED"] = "yes"
-  CONFIG["ENABLE_STATIC"] = "no"
-  CONFIG["MAINLIBS"] = ""
-  CONFIG["COMMON_LIBS"] = ""
-  CONFIG["COMMON_MACROS"] = ""
-  CONFIG["COMMON_HEADERS"] = ""
-  CONFIG["EXPORT_PREFIX"] = ""
-  CONFIG["THREAD_MODEL"] = "pthread"
-  CONFIG["MAKEFILES"] = "Makefile"
-  CONFIG["arch"] = "universal-darwin9.5"
-  CONFIG["sitearch"] = "universal-darwin9.5"
-  CONFIG["sitedir"] = "$(libdir)/ruby/site_ruby"
-  CONFIG["vendordir"] = "$(prefix)/lib/ruby/vendor_ruby"
-  CONFIG["configure_args"] = ""
-  CONFIG["rubyhdrdir"] = "$(includedir)/ruby-$(MAJOR).$(MINOR).$(TEENY)"
-  CONFIG["sitehdrdir"] = "$(rubyhdrdir)/site_ruby"
-  CONFIG["vendorhdrdir"] = "$(rubyhdrdir)/vendor_ruby"
-  CONFIG["NROFF"] = "/usr/bin/nroff"
-  CONFIG["MANTYPE"] = "doc"
-  CONFIG["ruby_version"] = "$(MAJOR).$(MINOR).$(TEENY)"
-  CONFIG["rubylibdir"] = "$(libdir)/ruby/$(ruby_version)"
-  CONFIG["archdir"] = "$(rubylibdir)/$(arch)"
-  CONFIG["sitelibdir"] = "$(sitedir)/$(ruby_version)"
-  CONFIG["sitearchdir"] = "$(sitelibdir)/$(sitearch)"
-  CONFIG["vendorlibdir"] = "$(vendordir)/$(ruby_version)"
-  CONFIG["vendorarchdir"] = "$(vendorlibdir)/$(sitearch)"
-  CONFIG["topdir"] = File.dirname(__FILE__)
-  MAKEFILE_CONFIG = {}
-  CONFIG.each{|k,v| MAKEFILE_CONFIG[k] = v.dup}
-  def RbConfig::expand(val, config = CONFIG)
-    val.gsub!(/\$\$|\$\(([^()]+)\)|\$\{([^{}]+)\}/) do
-      var = $&
-      if !(v = $1 || $2)
-        '$'
-      elsif key = config[v = v[/\A[^:]+(?=(?::(.*?)=(.*))?\z)/]]
-        pat, sub = $1, $2
-        config[v] = false
-        RbConfig::expand(key, config)
-        config[v] = key
-        key = key.gsub(/#{Regexp.quote(pat)}(?=\s|\z)/n) {sub} if pat
-        key
-      else
-        var
-      end
-    end
-    val
-  end
-  CONFIG.each_value do |val|
-    RbConfig::expand(val)
-  end
-end
-Config = RbConfig # compatibility for ruby-1.8.4 and older.
-CROSS_COMPILING = nil
-RUBY_FRAMEWORK = true
-RUBY_FRAMEWORK_VERSION = RbConfig::CONFIG['ruby_version']

Deleted: MacRuby/branches/experimental/revision.h
===================================================================
--- MacRuby/branches/experimental/revision.h	2009-03-11 21:14:13 UTC (rev 871)
+++ MacRuby/branches/experimental/revision.h	2009-03-11 21:33:18 UTC (rev 872)
@@ -1 +0,0 @@
-#define MACRUBY_REVISION "git commit 2092c0a090366f298383074ad0bc269d4335a89d"

Deleted: MacRuby/branches/experimental/y.tab.c
===================================================================
--- MacRuby/branches/experimental/y.tab.c	2009-03-11 21:14:13 UTC (rev 871)
+++ MacRuby/branches/experimental/y.tab.c	2009-03-11 21:33:18 UTC (rev 872)
@@ -1,15585 +0,0 @@
-/* A Bison parser, made by GNU Bison 2.3.  */
-
-/* Skeleton implementation for Bison's Yacc-like parsers in C
-
-   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
-   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 2, 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, write to the Free Software
-   Foundation, Inc., 51 Franklin Street, Fifth Floor,
-   Boston, MA 02110-1301, USA.  */
-
-/* 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.3"
-
-/* Skeleton name.  */
-#define YYSKELETON_NAME "yacc.c"
-
-/* Pure parsers.  */
-#define YYPURE 1
-
-/* Using locations.  */
-#define YYLSP_NEEDED 0
-
-
-
-/* Tokens.  */
-#ifndef YYTOKENTYPE
-# define YYTOKENTYPE
-   /* Put the tokens into the symbol table, so that GDB and other debuggers
-      know about them.  */
-   enum yytokentype {
-     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,
-     tSTRING_CONTENT = 316,
-     tCHAR = 317,
-     tNTH_REF = 318,
-     tBACK_REF = 319,
-     tREGEXP_END = 320,
-     tUPLUS = 321,
-     tUMINUS = 322,
-     tPOW = 323,
-     tCMP = 324,
-     tEQ = 325,
-     tEQQ = 326,
-     tNEQ = 327,
-     tGEQ = 328,
-     tLEQ = 329,
-     tANDOP = 330,
-     tOROP = 331,
-     tMATCH = 332,
-     tNMATCH = 333,
-     tDOT2 = 334,
-     tDOT3 = 335,
-     tAREF = 336,
-     tASET = 337,
-     tLSHFT = 338,
-     tRSHFT = 339,
-     tCOLON2 = 340,
-     tCOLON3 = 341,
-     tOP_ASGN = 342,
-     tASSOC = 343,
-     tLPAREN = 344,
-     tLPAREN_ARG = 345,
-     tRPAREN = 346,
-     tLBRACK = 347,
-     tLBRACE = 348,
-     tLBRACE_ARG = 349,
-     tSTAR = 350,
-     tAMPER = 351,
-     tLAMBDA = 352,
-     tSYMBEG = 353,
-     tSTRING_BEG = 354,
-     tXSTRING_BEG = 355,
-     tREGEXP_BEG = 356,
-     tWORDS_BEG = 357,
-     tQWORDS_BEG = 358,
-     tSTRING_DBEG = 359,
-     tSTRING_DVAR = 360,
-     tSTRING_END = 361,
-     tLAMBEG = 362,
-     tLOWEST = 363,
-     tUMINUS_NUM = 364,
-     tLAST_TOKEN = 365
-   };
-#endif
-/* Tokens.  */
-#define keyword_class 258
-#define keyword_module 259
-#define keyword_def 260
-#define keyword_undef 261
-#define keyword_begin 262
-#define keyword_rescue 263
-#define keyword_ensure 264
-#define keyword_end 265
-#define keyword_if 266
-#define keyword_unless 267
-#define keyword_then 268
-#define keyword_elsif 269
-#define keyword_else 270
-#define keyword_case 271
-#define keyword_when 272
-#define keyword_while 273
-#define keyword_until 274
-#define keyword_for 275
-#define keyword_break 276
-#define keyword_next 277
-#define keyword_redo 278
-#define keyword_retry 279
-#define keyword_in 280
-#define keyword_do 281
-#define keyword_do_cond 282
-#define keyword_do_block 283
-#define keyword_do_LAMBDA 284
-#define keyword_return 285
-#define keyword_yield 286
-#define keyword_super 287
-#define keyword_self 288
-#define keyword_nil 289
-#define keyword_true 290
-#define keyword_false 291
-#define keyword_and 292
-#define keyword_or 293
-#define keyword_not 294
-#define modifier_if 295
-#define modifier_unless 296
-#define modifier_while 297
-#define modifier_until 298
-#define modifier_rescue 299
-#define keyword_alias 300
-#define keyword_defined 301
-#define keyword_BEGIN 302
-#define keyword_END 303
-#define keyword__LINE__ 304
-#define keyword__FILE__ 305
-#define keyword__ENCODING__ 306
-#define tIDENTIFIER 307
-#define tFID 308
-#define tGVAR 309
-#define tIVAR 310
-#define tCONSTANT 311
-#define tCVAR 312
-#define tLABEL 313
-#define tINTEGER 314
-#define tFLOAT 315
-#define tSTRING_CONTENT 316
-#define tCHAR 317
-#define tNTH_REF 318
-#define tBACK_REF 319
-#define tREGEXP_END 320
-#define tUPLUS 321
-#define tUMINUS 322
-#define tPOW 323
-#define tCMP 324
-#define tEQ 325
-#define tEQQ 326
-#define tNEQ 327
-#define tGEQ 328
-#define tLEQ 329
-#define tANDOP 330
-#define tOROP 331
-#define tMATCH 332
-#define tNMATCH 333
-#define tDOT2 334
-#define tDOT3 335
-#define tAREF 336
-#define tASET 337
-#define tLSHFT 338
-#define tRSHFT 339
-#define tCOLON2 340
-#define tCOLON3 341
-#define tOP_ASGN 342
-#define tASSOC 343
-#define tLPAREN 344
-#define tLPAREN_ARG 345
-#define tRPAREN 346
-#define tLBRACK 347
-#define tLBRACE 348
-#define tLBRACE_ARG 349
-#define tSTAR 350
-#define tAMPER 351
-#define tLAMBDA 352
-#define tSYMBEG 353
-#define tSTRING_BEG 354
-#define tXSTRING_BEG 355
-#define tREGEXP_BEG 356
-#define tWORDS_BEG 357
-#define tQWORDS_BEG 358
-#define tSTRING_DBEG 359
-#define tSTRING_DVAR 360
-#define tSTRING_END 361
-#define tLAMBEG 362
-#define tLOWEST 363
-#define tUMINUS_NUM 364
-#define tLAST_TOKEN 365
-
-
-
-
-/* Copy the first part of user declarations.  */
-#line 12 "parse.y"
-
-
-#define YYDEBUG 1
-#define YYERROR_VERBOSE 1
-#define YYSTACK_USE_ALLOCA 0
-
-#include "ruby/ruby.h"
-#include "ruby/intern.h"
-#define __IN_PARSE_Y__ 1
-#include "ruby/node.h"
-#include "ruby/st.h"
-#include "ruby/encoding.h"
-#include "id.h"
-#include "regenc.h"
-#include <stdio.h>
-#include <errno.h>
-#include <ctype.h>
-
-#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)
-static inline void *orig_malloc(size_t l) { return malloc(l); }
-#define malloc	YYMALLOC
-#define realloc	YYREALLOC
-#define calloc	YYCALLOC
-#define free	YYFREE
-
-#define ID_SCOPE_SHIFT 3
-#define ID_SCOPE_MASK 0x07
-#define ID_LOCAL      0x00
-#define ID_INSTANCE   0x01
-#define ID_GLOBAL     0x03
-#define ID_ATTRSET    0x04
-#define ID_CONST      0x05
-#define ID_CLASS      0x06
-#define ID_JUNK       0x07
-#define ID_INTERNAL   ID_JUNK
-
-#define is_notop_id(id) ((id)>tLAST_TOKEN)
-#define is_local_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_LOCAL)
-#define is_global_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_GLOBAL)
-#define is_instance_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_INSTANCE)
-#define is_attrset_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_ATTRSET)
-#define is_const_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_CONST)
-#define is_class_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_CLASS)
-#define is_junk_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_JUNK)
-
-#define is_asgn_or_id(id) ((is_notop_id(id)) && \
-	(((id)&ID_SCOPE_MASK) == ID_GLOBAL || \
-	 ((id)&ID_SCOPE_MASK) == ID_INSTANCE || \
-	 ((id)&ID_SCOPE_MASK) == ID_CLASS))
-
-enum lex_state_e {
-    EXPR_BEG,			/* ignore newline, +/- is a sign. */
-    EXPR_END,			/* newline significant, +/- is a operator. */
-    EXPR_ENDARG,		/* ditto, and unbound braces. */
-    EXPR_ARG,			/* newline significant, +/- is a operator. */
-    EXPR_CMDARG,		/* newline significant, +/- is a operator. */
-    EXPR_MID,			/* newline significant, +/- is a operator. */
-    EXPR_FNAME,			/* ignore newline, no reserved words. */
-    EXPR_DOT,			/* right after `.' or `::', no reserved words. */
-    EXPR_CLASS,			/* immediate after `class', no here document. */
-    EXPR_VALUE,			/* alike EXPR_BEG but label is disallowed. */
-};
-
-# ifdef HAVE_LONG_LONG
-typedef unsigned LONG_LONG stack_type;
-# else
-typedef unsigned long stack_type;
-# endif
-
-# 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)
-
-/* must sync with real YYSTYPE */
-union tmpyystype {
-    VALUE val;
-    NODE *node;
-    unsigned long id;
-    int num;
-    struct RVarmap *vars;
-};
-
-struct vtable {
-    ID *tbl;
-    int pos;
-    int capa;
-    struct vtable *prev;
-};
-
-struct local_vars {
-    struct vtable *args;
-    struct vtable *vars;
-    struct local_vars *prev;
-};
-
-#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)
-
-#ifndef RIPPER
-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;
-    GC_WB(&tbl->tbl, ALLOC_N(ID, tbl->capa));
-    GC_WB(&tbl->prev, prev);
-    if (VTBL_DEBUG) printf("vtable_alloc: %p\n", tbl);
-    return tbl;
-}
-
-static void
-vtable_free(struct vtable *tbl)
-{
-    if (VTBL_DEBUG)printf("vtable_free: %p\n", tbl);
-    if (POINTER_P(tbl)) {
-        if (tbl->tbl) {
-            xfree(tbl->tbl);
-        }
-        if (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)", tbl);
-    }
-    if (VTBL_DEBUG) printf("vtable_add: %p, %s\n", tbl, rb_id2name(id));
-
-    if (tbl->pos == tbl->capa) {
-        tbl->capa = tbl->capa * 2;
-        REALLOC_N(tbl->tbl, ID, tbl->capa);
-        GC_WB(&tbl->tbl, tbl->tbl);
-    }
-    tbl->tbl[tbl->pos++] = id;
-}
-
-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 1;
-            }
-        }
-    }
-    return 0;
-}
-
-static ID*
-vtable_tblcpy(ID *buf, const struct vtable *src)
-{
-    int i, cnt = vtable_size(src);
-
-    if (cnt > 0) {
-        buf[0] = cnt;
-        for (i = 0; i < cnt; i++) {
-            buf[i] = src->tbl[i];
-        }
-        return buf;
-    }
-    return 0;
-}
-
-#endif
-
-/*
-    Structure of Lexer Buffer:
-
- lex_pbeg      tokp         lex_p        lex_pend
-    |           |              |            |
-    |-----------+--------------+------------|
-                |<------------>|
-                     token
-*/
-struct parser_params {
-    int is_ripper;
-    NODE *heap;
-
-    union tmpyystype *parser_yylval;   /* YYSTYPE not defined yet */
-    VALUE eofp;
-
-    NODE *parser_lex_strterm;
-    enum lex_state_e parser_lex_state;
-    stack_type parser_cond_stack;
-    stack_type parser_cmdarg_stack;
-    int parser_class_nest;
-    int parser_paren_nest;
-    int parser_lpar_beg;
-    int parser_in_single;
-    int parser_in_def;
-#if WITH_OBJC
-    int parser_in_def_named_args;
-    char parser_named_mid[1024];
-#endif
-    int parser_compile_for_eval;
-    VALUE parser_cur_mid;
-    int parser_in_defined;
-    char *parser_tokenbuf;
-    int parser_tokidx;
-    int parser_toksiz;
-    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;
-    int parser_lex_gets_ptr;
-    VALUE (*parser_lex_gets)(struct parser_params*,VALUE);
-    struct local_vars *parser_lvtbl;
-    int parser_ruby__end__seen;
-    int line_count;
-    int has_shebang;
-    char *parser_ruby_sourcefile; /* current source file */
-    int parser_ruby_sourceline;	/* current line no. */
-    rb_encoding *enc;
-    rb_encoding *utf8;
-
-    int parser_yydebug;
-
-#ifndef RIPPER
-    /* Ruby core only */
-    NODE *parser_eval_tree_begin;
-    NODE *parser_eval_tree;
-    VALUE debug_lines;
-    int nerr;
-#else
-    /* Ripper only */
-    VALUE parser_ruby_sourcefile_string;
-    const char *tokp;
-    VALUE delayed;
-    int delayed_line;
-    int delayed_col;
-
-    VALUE value;
-    VALUE result;
-    VALUE parsing_thread;
-    int toplevel_p;
-#endif
-};
-
-#if WITH_OBJC
-# define UTF8_ENC() (NULL)
-#else
-# define UTF8_ENC() (parser->utf8 ? parser->utf8 : \
-		    (parser->utf8 = rb_utf8_encoding()))
-#endif
-#define STR_NEW(p,n) rb_enc_str_new((p),(n),parser->enc)
-#define STR_NEW0() rb_usascii_str_new(0,0)
-#define STR_NEW2(p) rb_enc_str_new((p),strlen(p),parser->enc)
-#define STR_NEW3(p,n,e,func) parser_str_new((p),(n),(e),(func),parser->enc)
-#if WITH_OBJC
-# define STR_ENC(m) (parser->enc)
-# define ENC_SINGLE(cr) (1)
-#else
-# define STR_ENC(m) ((m)?parser->enc:rb_usascii_encoding())
-# define ENC_SINGLE(cr) ((cr)==ENC_CODERANGE_7BIT)
-#endif
-#define TOK_INTERN(mb) rb_intern3(tok(), toklen(), STR_ENC(mb))
-
-#ifdef YYMALLOC
-void *rb_parser_malloc(struct parser_params *, size_t);
-void *rb_parser_realloc(struct parser_params *, void *, size_t);
-void *rb_parser_calloc(struct parser_params *, size_t, size_t);
-void rb_parser_free(struct parser_params *, void *);
-#endif
-
-static int parser_yyerror(struct parser_params*, const char*);
-#define yyerror(msg) parser_yyerror(parser, msg)
-
-#define YYLEX_PARAM parser
-
-#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 class_nest		(parser->parser_class_nest)
-#define paren_nest		(parser->parser_paren_nest)
-#define lpar_beg		(parser->parser_lpar_beg)
-#define in_single		(parser->parser_in_single)
-#define in_def			(parser->parser_in_def)
-#if WITH_OBJC
-# define in_def_named_args	(parser->parser_in_def_named_args)
-# define named_mid		(parser->parser_named_mid)
-#endif
-#define compile_for_eval	(parser->parser_compile_for_eval)
-#define cur_mid			(parser->parser_cur_mid)
-#define in_defined		(parser->parser_in_defined)
-#define tokenbuf		(parser->parser_tokenbuf)
-#define tokidx			(parser->parser_tokidx)
-#define toksiz			(parser->parser_toksiz)
-#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 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 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)
-#endif
-
-static int yylex(void*, void*);
-
-#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*);
-#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_gen(struct parser_params*,NODE*,NODE*);
-#define list_concat(h,t) list_concat_gen(parser,h,t)
-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 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*,ID);
-#define new_args(f,o,r,p,b) new_args_gen(parser, f,o,r,p,b)
-static void shadowing_lvar_gen(struct parser_params*,ID);
-#define shadowing_lvar(name) shadowing_lvar_gen(parser, name)
-
-static NODE *negate_lit(NODE*);
-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 *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 void new_bv_gen(struct parser_params*,ID);
-#define new_bv(id) new_bv_gen(parser, id)
-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 *match_op_gen(struct parser_params*,NODE*,NODE*);
-#define match_op(node1,node2) match_op_gen(parser, node1, node2)
-
-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 int local_var_gen(struct parser_params*, ID);
-#define local_var(id) local_var_gen(parser, id);
-static int arg_var_gen(struct parser_params*, ID);
-#define arg_var(id) arg_var_gen(parser, id)
-#if WITH_OBJC
-static void named_arg_gen(struct parser_params*, ID, int);
-# define named_arg(id, flag) named_arg_gen(parser, id, flag)
-static NODE *process_named_args_gen(struct parser_params*, NODE*);
-# define process_named_args(node) process_named_args_gen(parser, node)
-static NODE *unprocess_named_args_gen(struct parser_params*, NODE*);
-# define unprocess_named_args(node) unprocess_named_args_gen(parser, node)
-#endif
-static int  local_id_gen(struct parser_params*, ID);
-#define local_id(id) local_id_gen(parser, id)
-static ID  *local_tbl_gen(struct parser_params*);
-#define local_tbl() local_tbl_gen(parser)
-static ID   internal_id_gen(struct parser_params*);
-#define internal_id() internal_id_gen(parser)
-
-static void dyna_push_gen(struct parser_params*);
-#define dyna_push() dyna_push_gen(parser)
-static void dyna_pop_gen(struct parser_params*);
-#define dyna_pop() dyna_pop_gen(parser)
-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);
-#define dvar_defined(id) dvar_defined_gen(parser, id)
-static int dvar_curr_gen(struct parser_params*,ID);
-#define dvar_curr(id) dvar_curr_gen(parser, id)
-
-extern int rb_dvar_defined(ID);
-extern int rb_local_defined(ID);
-extern int rb_parse_in_eval(void);
-
-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 void 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)
-int rb_enc_symname2_p(const char *, int, rb_encoding *);
-#else
-#define remove_begin(node) (node)
-#endif /* !RIPPER */
-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"
-
-#include "eventids1.c"
-#include "eventids2.c"
-static ID ripper_id_gets;
-
-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);
-
-#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 named_arg(id, flag)
-
-#define yyparse ripper_yyparse
-
-static VALUE ripper_intern(const char*);
-static VALUE ripper_id2sym(ID);
-
-#define arg_new() dispatch0(args_new)
-#define arg_add(l,a) dispatch2(args_add, l, a)
-#define arg_prepend(l,a) dispatch2(args_prepend, 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, blk) \
-        dispatch5(params, pars, opts, rest, pars2, 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))
-
-#define FIXME 0
-
-#endif /* RIPPER */
-
-#ifndef RIPPER
-# define ifndef_ripper(x) x
-#else
-# 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_warning0(fmt) rb_compile_warning(ruby_sourcefile, ruby_sourceline, fmt)
-# define rb_warningS(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_warning0(fmt) ripper_warning0(parser, fmt)
-# define rb_warningS(fmt,a) ripper_warningS(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_warning0(struct parser_params*, const char*);
-static void ripper_warningS(struct parser_params*, const char*, const char*);
-#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 compile_error parser->nerr++,rb_compile_error
-# define PARSER_ARG ruby_sourcefile, ruby_sourceline,
-#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
-
-
-
-/* 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
-
-#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-typedef union YYSTYPE
-#line 634 "parse.y"
-{
-    VALUE val;
-    NODE *node;
-    ID id;
-    int num;
-    struct RVarmap *vars;
-}
-/* Line 193 of yacc.c.  */
-#line 943 "y.tab.c"
-	YYSTYPE;
-# define yystype YYSTYPE /* obsolescent; will be withdrawn */
-# define YYSTYPE_IS_DECLARED 1
-# define YYSTYPE_IS_TRIVIAL 1
-#endif
-
-
-
-/* Copy the second part of user declarations.  */
-
-
-/* Line 216 of yacc.c.  */
-#line 956 "y.tab.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 i)
-#else
-static int
-YYID (i)
-    int i;
-#endif
-{
-  return i;
-}
-#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 _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-#     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
-#     ifndef _STDLIB_H
-#      define _STDLIB_H 1
-#     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 _STDLIB_H \
-       && ! ((defined YYMALLOC || defined malloc) \
-	     && (defined YYFREE || defined free)))
-#   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
-#   ifndef _STDLIB_H
-#    define _STDLIB_H 1
-#   endif
-#  endif
-#  ifndef YYMALLOC
-#   define YYMALLOC malloc
-#   if ! defined malloc && ! defined _STDLIB_H && (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 _STDLIB_H && (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;
-  YYSTYPE yyvs;
-  };
-
-/* 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)
-
-/* 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
-
-/* 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)					\
-    do									\
-      {									\
-	YYSIZE_T yynewbytes;						\
-	YYCOPY (&yyptr->Stack, Stack, yysize);				\
-	Stack = &yyptr->Stack;						\
-	yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
-	yyptr += yynewbytes / sizeof (*yyptr);				\
-      }									\
-    while (YYID (0))
-
-#endif
-
-/* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  3
-/* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   9886
-
-/* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  138
-/* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  157
-/* YYNRULES -- Number of rules.  */
-#define YYNRULES  542
-/* YYNRULES -- Number of states.  */
-#define YYNSTATES  940
-
-/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
-#define YYUNDEFTOK  2
-#define YYMAXUTOK   365
-
-#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,
-     137,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,   136,   123,     2,     2,     2,   121,   116,     2,
-     132,   133,   119,   117,   130,   118,   129,   120,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,   111,   135,
-     113,   109,   112,   110,     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,   128,     2,   134,   115,     2,   131,     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,   126,   114,   127,   124,     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,     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,    68,    69,    70,    71,    72,    73,    74,
-      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
-      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
-     105,   106,   107,   108,   122,   125
-};
-
-#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,    12,    15,    17,    19,    23,
-      26,    27,    32,    36,    40,    44,    47,    51,    55,    59,
-      63,    67,    68,    74,    79,    83,    87,    91,    98,   104,
-     110,   116,   120,   124,   128,   132,   134,   136,   140,   144,
-     147,   150,   152,   154,   156,   158,   161,   164,   167,   169,
-     174,   179,   180,   186,   189,   193,   198,   204,   209,   215,
-     218,   221,   223,   227,   229,   233,   235,   238,   242,   248,
-     251,   256,   259,   264,   266,   270,   272,   276,   279,   283,
-     285,   289,   291,   296,   300,   304,   308,   312,   315,   317,
-     319,   324,   328,   332,   336,   340,   343,   345,   347,   349,
-     352,   354,   358,   360,   362,   364,   366,   368,   370,   372,
-     374,   376,   378,   379,   384,   386,   388,   390,   392,   394,
-     396,   398,   400,   402,   404,   406,   408,   410,   412,   414,
-     416,   418,   420,   422,   424,   426,   428,   430,   432,   434,
-     436,   438,   440,   442,   444,   446,   448,   450,   452,   454,
-     456,   458,   460,   462,   464,   466,   468,   470,   472,   474,
-     476,   478,   480,   482,   484,   486,   488,   490,   492,   494,
-     496,   498,   500,   502,   504,   506,   508,   510,   512,   514,
-     516,   518,   520,   522,   524,   528,   534,   538,   544,   551,
-     557,   563,   569,   575,   580,   584,   588,   592,   596,   600,
-     604,   608,   612,   616,   621,   626,   629,   632,   636,   640,
-     644,   648,   652,   656,   660,   664,   668,   672,   676,   680,
-     684,   687,   690,   694,   698,   702,   706,   707,   712,   719,
-     721,   723,   725,   728,   733,   736,   740,   742,   744,   746,
-     748,   750,   753,   756,   761,   763,   768,   772,   775,   780,
-     787,   789,   790,   793,   795,   796,   800,   801,   806,   809,
-     812,   814,   816,   819,   823,   828,   832,   837,   840,   842,
-     844,   846,   848,   850,   852,   854,   856,   858,   859,   864,
-     865,   870,   874,   878,   881,   885,   889,   891,   896,   900,
-     902,   903,   910,   913,   915,   918,   921,   928,   935,   936,
-     937,   945,   946,   947,   955,   961,   966,   967,   968,   978,
-     979,   986,   987,   988,   997,   998,  1004,  1005,  1012,  1013,
-    1014,  1024,  1026,  1028,  1030,  1032,  1034,  1036,  1038,  1041,
-    1043,  1045,  1047,  1053,  1055,  1058,  1060,  1062,  1064,  1068,
-    1070,  1074,  1076,  1081,  1088,  1092,  1098,  1101,  1106,  1108,
-    1112,  1117,  1120,  1127,  1130,  1133,  1138,  1140,  1142,  1144,
-    1148,  1150,  1155,  1157,  1160,  1162,  1166,  1168,  1170,  1171,
-    1175,  1180,  1183,  1187,  1191,  1192,  1198,  1201,  1206,  1211,
-    1214,  1219,  1224,  1228,  1232,  1236,  1239,  1241,  1246,  1247,
-    1253,  1254,  1260,  1266,  1268,  1270,  1277,  1279,  1281,  1283,
-    1285,  1288,  1290,  1293,  1295,  1297,  1299,  1301,  1303,  1305,
-    1307,  1310,  1314,  1318,  1322,  1326,  1330,  1331,  1335,  1337,
-    1340,  1344,  1348,  1349,  1353,  1354,  1357,  1358,  1361,  1363,
-    1364,  1368,  1369,  1374,  1376,  1378,  1380,  1382,  1385,  1387,
-    1389,  1391,  1393,  1397,  1399,  1401,  1404,  1407,  1409,  1411,
-    1413,  1415,  1417,  1419,  1421,  1423,  1425,  1427,  1429,  1431,
-    1433,  1435,  1437,  1439,  1441,  1442,  1447,  1450,  1454,  1457,
-    1464,  1473,  1478,  1485,  1490,  1497,  1500,  1505,  1512,  1515,
-    1520,  1523,  1528,  1530,  1531,  1533,  1535,  1537,  1539,  1541,
-    1543,  1547,  1550,  1552,  1556,  1558,  1562,  1566,  1568,  1572,
-    1574,  1576,  1579,  1581,  1583,  1585,  1588,  1591,  1593,  1595,
-    1596,  1601,  1603,  1606,  1608,  1612,  1616,  1619,  1621,  1623,
-    1625,  1627,  1629,  1631,  1633,  1635,  1637,  1639,  1641,  1643,
-    1644,  1646,  1647,  1649,  1652,  1655,  1656,  1658,  1660,  1662,
-    1664,  1666,  1669
-};
-
-/* YYRHS -- A `-1'-separated list of the rules' RHS.  */
-static const yytype_int16 yyrhs[] =
-{
-     139,     0,    -1,    -1,   140,   142,    -1,   142,   234,   210,
-     237,    -1,   143,   287,    -1,   294,    -1,   144,    -1,   143,
-     293,   144,    -1,     1,   144,    -1,    -1,    45,   166,   145,
-     166,    -1,    45,    54,    54,    -1,    45,    54,    64,    -1,
-      45,    54,    63,    -1,     6,   167,    -1,   144,    40,   148,
-      -1,   144,    41,   148,    -1,   144,    42,   148,    -1,   144,
-      43,   148,    -1,   144,    44,   144,    -1,    -1,    47,   146,
-     126,   142,   127,    -1,    48,   126,   142,   127,    -1,   161,
-     109,   149,    -1,   154,   109,   149,    -1,   261,    87,   149,
-      -1,   206,   128,   177,   290,    87,   149,    -1,   206,   129,
-      52,    87,   149,    -1,   206,   129,    56,    87,   149,    -1,
-     206,    85,    52,    87,   149,    -1,   262,    87,   149,    -1,
-     161,   109,   188,    -1,   154,   109,   173,    -1,   154,   109,
-     188,    -1,   147,    -1,   149,    -1,   147,    37,   147,    -1,
-     147,    38,   147,    -1,    39,   147,    -1,   123,   149,    -1,
-     171,    -1,   147,    -1,   153,    -1,   150,    -1,    30,   178,
-      -1,    21,   178,    -1,    22,   178,    -1,   227,    -1,   227,
-     129,   284,   180,    -1,   227,    85,   284,   180,    -1,    -1,
-      94,   152,   216,   142,   127,    -1,   283,   180,    -1,   283,
-     180,   151,    -1,   206,   129,   284,   180,    -1,   206,   129,
-     284,   180,   151,    -1,   206,    85,   284,   180,    -1,   206,
-      85,   284,   180,   151,    -1,    32,   180,    -1,    31,   180,
-      -1,   156,    -1,    89,   155,   289,    -1,   156,    -1,    89,
-     155,   289,    -1,   158,    -1,   158,   157,    -1,   158,    95,
-     160,    -1,   158,    95,   160,   130,   159,    -1,   158,    95,
-      -1,   158,    95,   130,   159,    -1,    95,   160,    -1,    95,
-     160,   130,   159,    -1,    95,    -1,    95,   130,   159,    -1,
-     160,    -1,    89,   155,   289,    -1,   157,   130,    -1,   158,
-     157,   130,    -1,   157,    -1,   159,   130,   157,    -1,   259,
-      -1,   206,   128,   177,   290,    -1,   206,   129,    52,    -1,
-     206,    85,    52,    -1,   206,   129,    56,    -1,   206,    85,
-      56,    -1,    86,    56,    -1,   262,    -1,   259,    -1,   206,
-     128,   177,   290,    -1,   206,   129,    52,    -1,   206,    85,
-      52,    -1,   206,   129,    56,    -1,   206,    85,    56,    -1,
-      86,    56,    -1,   262,    -1,    52,    -1,    56,    -1,    86,
-     162,    -1,   162,    -1,   206,    85,   162,    -1,    52,    -1,
-      56,    -1,    53,    -1,   169,    -1,   170,    -1,   164,    -1,
-     255,    -1,   165,    -1,   257,    -1,   166,    -1,    -1,   167,
-     130,   168,   166,    -1,   114,    -1,   115,    -1,   116,    -1,
-      69,    -1,    70,    -1,    71,    -1,    77,    -1,    78,    -1,
-     112,    -1,    73,    -1,   113,    -1,    74,    -1,    72,    -1,
-      83,    -1,    84,    -1,   117,    -1,   118,    -1,   119,    -1,
-      95,    -1,   120,    -1,   121,    -1,    68,    -1,   123,    -1,
-     124,    -1,    66,    -1,    67,    -1,    81,    -1,    82,    -1,
-     131,    -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,   161,   109,   171,    -1,   161,   109,
-     171,    44,   171,    -1,   261,    87,   171,    -1,   261,    87,
-     171,    44,   171,    -1,   206,   128,   177,   290,    87,   171,
-      -1,   206,   129,    52,    87,   171,    -1,   206,   129,    56,
-      87,   171,    -1,   206,    85,    52,    87,   171,    -1,   206,
-      85,    56,    87,   171,    -1,    86,    56,    87,   171,    -1,
-     262,    87,   171,    -1,   171,    79,   171,    -1,   171,    80,
-     171,    -1,   171,   117,   171,    -1,   171,   118,   171,    -1,
-     171,   119,   171,    -1,   171,   120,   171,    -1,   171,   121,
-     171,    -1,   171,    68,   171,    -1,   122,    59,    68,   171,
-      -1,   122,    60,    68,   171,    -1,    66,   171,    -1,    67,
-     171,    -1,   171,   114,   171,    -1,   171,   115,   171,    -1,
-     171,   116,   171,    -1,   171,    69,   171,    -1,   171,   112,
-     171,    -1,   171,    73,   171,    -1,   171,   113,   171,    -1,
-     171,    74,   171,    -1,   171,    70,   171,    -1,   171,    71,
-     171,    -1,   171,    72,   171,    -1,   171,    77,   171,    -1,
-     171,    78,   171,    -1,   123,   171,    -1,   124,   171,    -1,
-     171,    83,   171,    -1,   171,    84,   171,    -1,   171,    75,
-     171,    -1,   171,    76,   171,    -1,    -1,    46,   288,   172,
-     171,    -1,   171,   110,   171,   288,   111,   171,    -1,   189,
-      -1,   171,    -1,   294,    -1,   187,   291,    -1,   187,   130,
-     281,   291,    -1,   281,   291,    -1,   132,   177,   289,    -1,
-     294,    -1,   175,    -1,   294,    -1,   178,    -1,   153,    -1,
-     187,   186,    -1,   281,   186,    -1,   187,   130,   281,   186,
-      -1,   185,    -1,   173,   130,   187,   186,    -1,   173,   130,
-     185,    -1,   281,   186,    -1,   173,   130,   281,   186,    -1,
-     173,   130,   187,   130,   281,   186,    -1,   185,    -1,    -1,
-     181,   182,    -1,   178,    -1,    -1,    90,   183,   289,    -1,
-      -1,    90,   179,   184,   289,    -1,    96,   173,    -1,   130,
-     185,    -1,   294,    -1,   173,    -1,    95,   173,    -1,   187,
-     130,   173,    -1,   187,   130,    95,   173,    -1,   187,   130,
-     173,    -1,   187,   130,    95,   173,    -1,    95,   173,    -1,
-     238,    -1,   239,    -1,   242,    -1,   243,    -1,   244,    -1,
-     247,    -1,   260,    -1,   262,    -1,    53,    -1,    -1,     7,
-     190,   141,    10,    -1,    -1,    90,   147,   191,   289,    -1,
-      89,   142,   133,    -1,   206,    85,    56,    -1,    86,    56,
-      -1,    92,   174,   134,    -1,    93,   280,   127,    -1,    30,
-      -1,    31,   132,   178,   289,    -1,    31,   132,   289,    -1,
-      31,    -1,    -1,    46,   288,   132,   192,   147,   289,    -1,
-     283,   229,    -1,   228,    -1,   228,   229,    -1,    97,   221,
-      -1,    11,   148,   207,   142,   209,    10,    -1,    12,   148,
-     207,   142,   210,    10,    -1,    -1,    -1,    18,   193,   148,
-     208,   194,   142,    10,    -1,    -1,    -1,    19,   195,   148,
-     208,   196,   142,    10,    -1,    16,   148,   287,   232,    10,
-      -1,    16,   287,   232,    10,    -1,    -1,    -1,    20,   211,
-      25,   197,   148,   208,   198,   142,    10,    -1,    -1,     3,
-     163,   263,   199,   141,    10,    -1,    -1,    -1,     3,    83,
-     147,   200,   292,   201,   141,    10,    -1,    -1,     4,   163,
-     202,   141,    10,    -1,    -1,     5,   164,   203,   265,   141,
-      10,    -1,    -1,    -1,     5,   278,   286,   204,   164,   205,
-     265,   141,    10,    -1,    21,    -1,    22,    -1,    23,    -1,
-      24,    -1,   189,    -1,   292,    -1,    13,    -1,   292,    13,
-      -1,   292,    -1,    27,    -1,   210,    -1,    14,   148,   207,
-     142,   209,    -1,   294,    -1,    15,   142,    -1,   161,    -1,
-     154,    -1,   268,    -1,    89,   214,   289,    -1,   212,    -1,
-     213,   130,   212,    -1,   213,    -1,   213,   130,    95,   268,
-      -1,   213,   130,    95,   268,   130,   213,    -1,   213,   130,
-      95,    -1,   213,   130,    95,   130,   213,    -1,    95,   268,
-      -1,    95,   268,   130,   213,    -1,    95,    -1,    95,   130,
-     213,    -1,   270,   130,   274,   277,    -1,   270,   130,    -1,
-     270,   130,   274,   130,   270,   277,    -1,   270,   277,    -1,
-     274,   277,    -1,   274,   130,   270,   277,    -1,   276,    -1,
-     294,    -1,   217,    -1,   114,   218,   114,    -1,    76,    -1,
-     114,   215,   218,   114,    -1,   294,    -1,   135,   219,    -1,
-     220,    -1,   219,   130,   220,    -1,    52,    -1,   267,    -1,
-      -1,   222,   223,   224,    -1,   132,   266,   218,   289,    -1,
-     266,   218,    -1,   107,   142,   127,    -1,    29,   142,    10,
-      -1,    -1,    28,   226,   216,   142,    10,    -1,   153,   225,
-      -1,   227,   129,   284,   176,    -1,   227,    85,   284,   176,
-      -1,   283,   175,    -1,   206,   129,   284,   176,    -1,   206,
-      85,   284,   175,    -1,   206,    85,   285,    -1,   206,   129,
-     175,    -1,   206,    85,   175,    -1,    32,   175,    -1,    32,
-      -1,   206,   128,   177,   290,    -1,    -1,   126,   230,   216,
-     142,   127,    -1,    -1,    26,   231,   216,   142,    10,    -1,
-      17,   187,   207,   142,   233,    -1,   210,    -1,   232,    -1,
-       8,   235,   236,   207,   142,   234,    -1,   294,    -1,   173,
-      -1,   188,    -1,   294,    -1,    88,   161,    -1,   294,    -1,
-       9,   142,    -1,   294,    -1,   258,    -1,   255,    -1,   257,
-      -1,   240,    -1,    62,    -1,   241,    -1,   240,   241,    -1,
-      99,   249,   106,    -1,   100,   250,   106,    -1,   101,   250,
-      65,    -1,   102,   136,   106,    -1,   102,   245,   106,    -1,
-      -1,   245,   246,   136,    -1,   251,    -1,   246,   251,    -1,
-     103,   136,   106,    -1,   103,   248,   106,    -1,    -1,   248,
-      61,   136,    -1,    -1,   249,   251,    -1,    -1,   250,   251,
-      -1,    61,    -1,    -1,   105,   252,   254,    -1,    -1,   104,
-     253,   142,   127,    -1,    54,    -1,    55,    -1,    57,    -1,
-     262,    -1,    98,   256,    -1,   164,    -1,    55,    -1,    54,
-      -1,    57,    -1,    98,   250,   106,    -1,    59,    -1,    60,
-      -1,   122,    59,    -1,   122,    60,    -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,   259,    -1,   259,    -1,    63,    -1,    64,    -1,   292,
-      -1,    -1,   113,   264,   148,   292,    -1,     1,   292,    -1,
-     132,   266,   289,    -1,   266,   292,    -1,   270,   130,   272,
-     130,   274,   277,    -1,   270,   130,   272,   130,   274,   130,
-     270,   277,    -1,   270,   130,   272,   277,    -1,   270,   130,
-     272,   130,   270,   277,    -1,   270,   130,   274,   277,    -1,
-     270,   130,   274,   130,   270,   277,    -1,   270,   277,    -1,
-     272,   130,   274,   277,    -1,   272,   130,   274,   130,   270,
-     277,    -1,   272,   277,    -1,   272,   130,   270,   277,    -1,
-     274,   277,    -1,   274,   130,   270,   277,    -1,   276,    -1,
-      -1,    56,    -1,    55,    -1,    54,    -1,    57,    -1,   267,
-      -1,    52,    -1,    52,    88,    52,    -1,    58,    52,    -1,
-     268,    -1,    89,   214,   289,    -1,   269,    -1,   270,   130,
-     269,    -1,    52,   109,   173,    -1,   271,    -1,   272,   130,
-     271,    -1,   119,    -1,    95,    -1,   273,    52,    -1,   273,
-      -1,   116,    -1,    96,    -1,   275,    52,    -1,   130,   276,
-      -1,   294,    -1,   260,    -1,    -1,   132,   279,   147,   289,
-      -1,   294,    -1,   281,   291,    -1,   282,    -1,   281,   130,
-     282,    -1,   173,    88,   173,    -1,    58,   173,    -1,    52,
-      -1,    56,    -1,    53,    -1,    52,    -1,    56,    -1,    53,
-      -1,   169,    -1,    52,    -1,    53,    -1,   169,    -1,   129,
-      -1,    85,    -1,    -1,   293,    -1,    -1,   137,    -1,   288,
-     133,    -1,   288,   134,    -1,    -1,   137,    -1,   130,    -1,
-     135,    -1,   137,    -1,   292,    -1,   293,   135,    -1,    -1
-};
-
-/* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
-static const yytype_uint16 yyrline[] =
-{
-       0,   787,   787,   787,   817,   850,   860,   869,   877,   885,
-     891,   891,   899,   907,   918,   928,   936,   945,   954,   967,
-     980,   990,   989,  1011,  1023,  1032,  1042,  1071,  1092,  1109,
-    1126,  1143,  1153,  1162,  1171,  1180,  1183,  1184,  1192,  1200,
-    1208,  1216,  1219,  1231,  1232,  1233,  1241,  1249,  1259,  1260,
-    1269,  1281,  1280,  1302,  1311,  1323,  1332,  1344,  1353,  1365,
-    1374,  1385,  1386,  1396,  1397,  1407,  1415,  1423,  1431,  1439,
-    1447,  1455,  1463,  1471,  1479,  1489,  1490,  1500,  1508,  1518,
-    1526,  1536,  1544,  1552,  1560,  1568,  1576,  1588,  1598,  1610,
-    1618,  1626,  1634,  1642,  1650,  1663,  1676,  1687,  1695,  1698,
-    1706,  1714,  1724,  1725,  1726,  1727,  1737,  1749,  1750,  1753,
-    1761,  1764,  1772,  1772,  1782,  1783,  1784,  1785,  1786,  1787,
-    1788,  1789,  1790,  1791,  1792,  1793,  1794,  1795,  1796,  1797,
-    1798,  1799,  1800,  1801,  1802,  1803,  1804,  1805,  1806,  1807,
-    1808,  1809,  1810,  1813,  1813,  1813,  1814,  1814,  1815,  1815,
-    1815,  1816,  1816,  1816,  1816,  1817,  1817,  1817,  1817,  1818,
-    1818,  1818,  1819,  1819,  1819,  1819,  1820,  1820,  1820,  1820,
-    1821,  1821,  1821,  1821,  1822,  1822,  1822,  1822,  1823,  1823,
-    1823,  1823,  1824,  1824,  1827,  1836,  1846,  1875,  1906,  1927,
-    1944,  1961,  1978,  1989,  2000,  2011,  2028,  2045,  2053,  2061,
-    2069,  2077,  2085,  2093,  2102,  2111,  2119,  2127,  2135,  2143,
-    2151,  2159,  2167,  2175,  2183,  2191,  2199,  2207,  2215,  2226,
-    2234,  2242,  2250,  2258,  2266,  2274,  2282,  2282,  2292,  2302,
-    2308,  2320,  2321,  2325,  2333,  2343,  2353,  2354,  2357,  2358,
-    2361,  2369,  2377,  2387,  2418,  2427,  2435,  2443,  2453,  2463,
-    2473,  2476,  2476,  2488,  2489,  2489,  2498,  2498,  2509,  2519,
-    2523,  2529,  2537,  2545,  2559,  2576,  2590,  2605,  2615,  2616,
-    2617,  2618,  2619,  2620,  2621,  2622,  2623,  2632,  2631,  2656,
-    2656,  2665,  2673,  2681,  2689,  2702,  2710,  2718,  2726,  2734,
-    2742,  2742,  2752,  2763,  2764,  2775,  2779,  2791,  2803,  2803,
-    2803,  2814,  2814,  2814,  2825,  2836,  2845,  2847,  2844,  2921,
-    2920,  2942,  2951,  2941,  2977,  2976,  2998,  2997,  3043,  3044,
-    3043,  3086,  3094,  3102,  3110,  3120,  3132,  3137,  3138,  3145,
-    3150,  3153,  3154,  3167,  3168,  3178,  3179,  3182,  3190,  3200,
-    3208,  3218,  3226,  3234,  3242,  3250,  3258,  3266,  3277,  3285,
-    3295,  3303,  3312,  3320,  3328,  3336,  3344,  3354,  3355,  3361,
-    3370,  3379,  3390,  3391,  3401,  3408,  3417,  3425,  3431,  3431,
-    3453,  3461,  3471,  3475,  3482,  3481,  3502,  3513,  3522,  3533,
-    3542,  3552,  3562,  3570,  3581,  3592,  3600,  3608,  3623,  3622,
-    3642,  3641,  3662,  3674,  3675,  3678,  3697,  3700,  3708,  3716,
-    3719,  3723,  3726,  3734,  3737,  3738,  3746,  3749,  3766,  3767,
-    3768,  3778,  3788,  3815,  3857,  3865,  3872,  3879,  3889,  3897,
-    3907,  3915,  3922,  3929,  3940,  3947,  3958,  3965,  3975,  3977,
-    3976,  3993,  3992,  4014,  4022,  4030,  4038,  4041,  4053,  4054,
-    4055,  4056,  4059,  4090,  4091,  4092,  4100,  4110,  4111,  4112,
-    4113,  4114,  4115,  4116,  4117,  4118,  4119,  4120,  4121,  4124,
-    4134,  4144,  4145,  4148,  4157,  4156,  4164,  4176,  4188,  4194,
-    4202,  4210,  4218,  4226,  4234,  4242,  4250,  4258,  4266,  4274,
-    4282,  4290,  4298,  4307,  4316,  4325,  4334,  4343,  4354,  4355,
-    4365,  4372,  4381,  4389,  4408,  4415,  4428,  4442,  4450,  4466,
-    4467,  4470,  4482,  4493,  4494,  4497,  4513,  4517,  4527,  4537,
-    4537,  4566,  4567,  4577,  4584,  4594,  4602,  4612,  4613,  4614,
-    4617,  4618,  4619,  4620,  4623,  4624,  4625,  4628,  4633,  4640,
-    4641,  4644,  4645,  4648,  4651,  4654,  4655,  4656,  4659,  4660,
-    4663,  4664,  4668
-};
-#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", "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", "tSTRING_CONTENT", "tCHAR", "tNTH_REF",
-  "tBACK_REF", "tREGEXP_END", "tUPLUS", "tUMINUS", "tPOW", "tCMP", "tEQ",
-  "tEQQ", "tNEQ", "tGEQ", "tLEQ", "tANDOP", "tOROP", "tMATCH", "tNMATCH",
-  "tDOT2", "tDOT3", "tAREF", "tASET", "tLSHFT", "tRSHFT", "tCOLON2",
-  "tCOLON3", "tOP_ASGN", "tASSOC", "tLPAREN", "tLPAREN_ARG", "tRPAREN",
-  "tLBRACK", "tLBRACE", "tLBRACE_ARG", "tSTAR", "tAMPER", "tLAMBDA",
-  "tSYMBEG", "tSTRING_BEG", "tXSTRING_BEG", "tREGEXP_BEG", "tWORDS_BEG",
-  "tQWORDS_BEG", "tSTRING_DBEG", "tSTRING_DVAR", "tSTRING_END", "tLAMBEG",
-  "tLOWEST", "'='", "'?'", "':'", "'>'", "'<'", "'|'", "'^'", "'&'", "'+'",
-  "'-'", "'*'", "'/'", "'%'", "tUMINUS_NUM", "'!'", "'~'", "tLAST_TOKEN",
-  "'{'", "'}'", "'['", "'.'", "','", "'`'", "'('", "')'", "']'", "';'",
-  "' '", "'\\n'", "$accept", "program", "@1", "bodystmt", "compstmt",
-  "stmts", "stmt", "@2", "@3", "expr", "expr_value", "command_call",
-  "block_command", "cmd_brace_block", "@4", "command", "mlhs",
-  "mlhs_inner", "mlhs_basic", "mlhs_item", "mlhs_head", "mlhs_post",
-  "mlhs_node", "lhs", "cname", "cpath", "fname", "fsym", "fitem",
-  "undef_list", "@5", "op", "reswords", "arg", "@6", "arg_value",
-  "aref_args", "paren_args", "opt_paren_args", "opt_call_args",
-  "call_args", "call_args2", "command_args", "@7", "open_args", "@8", "@9",
-  "block_arg", "opt_block_arg", "args", "mrhs", "primary", "@10", "@11",
-  "@12", "@13", "@14", "@15", "@16", "@17", "@18", "@19", "@20", "@21",
-  "@22", "@23", "@24", "@25", "primary_value", "then", "do", "if_tail",
-  "opt_else", "for_var", "f_marg", "f_marg_list", "f_margs", "block_param",
-  "opt_block_param", "block_param_def", "opt_bv_decl", "bv_decls", "bvar",
-  "lambda", "@26", "f_larglist", "lambda_body", "do_block", "@27",
-  "block_call", "method_call", "brace_block", "@28", "@29", "case_body",
-  "cases", "opt_rescue", "exc_list", "exc_var", "opt_ensure", "literal",
-  "strings", "string", "string1", "xstring", "regexp", "words",
-  "word_list", "word", "qwords", "qword_list", "string_contents",
-  "xstring_contents", "string_content", "@30", "@31", "string_dvar",
-  "symbol", "sym", "dsym", "numeric", "variable", "var_ref", "var_lhs",
-  "backref", "superclass", "@32", "f_arglist", "f_args", "f_bad_arg",
-  "f_norm_arg", "f_arg_item", "f_arg", "f_opt", "f_optarg", "restarg_mark",
-  "f_rest_arg", "blkarg_mark", "f_block_arg", "opt_f_block_arg",
-  "singleton", "@33", "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,   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,   352,   353,   354,
-     355,   356,   357,   358,   359,   360,   361,   362,   363,    61,
-      63,    58,    62,    60,   124,    94,    38,    43,    45,    42,
-      47,    37,   364,    33,   126,   365,   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,   138,   140,   139,   141,   142,   143,   143,   143,   143,
-     145,   144,   144,   144,   144,   144,   144,   144,   144,   144,
-     144,   146,   144,   144,   144,   144,   144,   144,   144,   144,
-     144,   144,   144,   144,   144,   144,   147,   147,   147,   147,
-     147,   147,   148,   149,   149,   149,   149,   149,   150,   150,
-     150,   152,   151,   153,   153,   153,   153,   153,   153,   153,
-     153,   154,   154,   155,   155,   156,   156,   156,   156,   156,
-     156,   156,   156,   156,   156,   157,   157,   158,   158,   159,
-     159,   160,   160,   160,   160,   160,   160,   160,   160,   161,
-     161,   161,   161,   161,   161,   161,   161,   162,   162,   163,
-     163,   163,   164,   164,   164,   164,   164,   165,   165,   166,
-     166,   167,   168,   167,   169,   169,   169,   169,   169,   169,
-     169,   169,   169,   169,   169,   169,   169,   169,   169,   169,
-     169,   169,   169,   169,   169,   169,   169,   169,   169,   169,
-     169,   169,   169,   170,   170,   170,   170,   170,   170,   170,
-     170,   170,   170,   170,   170,   170,   170,   170,   170,   170,
-     170,   170,   170,   170,   170,   170,   170,   170,   170,   170,
-     170,   170,   170,   170,   170,   170,   170,   170,   170,   170,
-     170,   170,   170,   170,   171,   171,   171,   171,   171,   171,
-     171,   171,   171,   171,   171,   171,   171,   171,   171,   171,
-     171,   171,   171,   171,   171,   171,   171,   171,   171,   171,
-     171,   171,   171,   171,   171,   171,   171,   171,   171,   171,
-     171,   171,   171,   171,   171,   171,   172,   171,   171,   171,
-     173,   174,   174,   174,   174,   175,   176,   176,   177,   177,
-     178,   178,   178,   178,   178,   179,   179,   179,   179,   179,
-     179,   181,   180,   182,   183,   182,   184,   182,   185,   186,
-     186,   187,   187,   187,   187,   188,   188,   188,   189,   189,
-     189,   189,   189,   189,   189,   189,   189,   190,   189,   191,
-     189,   189,   189,   189,   189,   189,   189,   189,   189,   189,
-     192,   189,   189,   189,   189,   189,   189,   189,   193,   194,
-     189,   195,   196,   189,   189,   189,   197,   198,   189,   199,
-     189,   200,   201,   189,   202,   189,   203,   189,   204,   205,
-     189,   189,   189,   189,   189,   206,   207,   207,   207,   208,
-     208,   209,   209,   210,   210,   211,   211,   212,   212,   213,
-     213,   214,   214,   214,   214,   214,   214,   214,   214,   214,
-     215,   215,   215,   215,   215,   215,   215,   216,   216,   217,
-     217,   217,   218,   218,   219,   219,   220,   220,   222,   221,
-     223,   223,   224,   224,   226,   225,   227,   227,   227,   228,
-     228,   228,   228,   228,   228,   228,   228,   228,   230,   229,
-     231,   229,   232,   233,   233,   234,   234,   235,   235,   235,
-     236,   236,   237,   237,   238,   238,   238,   239,   240,   240,
-     240,   241,   242,   243,   244,   244,   245,   245,   246,   246,
-     247,   247,   248,   248,   249,   249,   250,   250,   251,   252,
-     251,   253,   251,   254,   254,   254,   254,   255,   256,   256,
-     256,   256,   257,   258,   258,   258,   258,   259,   259,   259,
-     259,   259,   259,   259,   259,   259,   259,   259,   259,   260,
-     261,   262,   262,   263,   264,   263,   263,   265,   265,   266,
-     266,   266,   266,   266,   266,   266,   266,   266,   266,   266,
-     266,   266,   266,   266,   267,   267,   267,   267,   268,   268,
-     268,   268,   269,   269,   270,   270,   271,   272,   272,   273,
-     273,   274,   274,   275,   275,   276,   277,   277,   278,   279,
-     278,   280,   280,   281,   281,   282,   282,   283,   283,   283,
-     284,   284,   284,   284,   285,   285,   285,   286,   286,   287,
-     287,   288,   288,   289,   290,   291,   291,   291,   292,   292,
-     293,   293,   294
-};
-
-/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
-static const yytype_uint8 yyr2[] =
-{
-       0,     2,     0,     2,     4,     2,     1,     1,     3,     2,
-       0,     4,     3,     3,     3,     2,     3,     3,     3,     3,
-       3,     0,     5,     4,     3,     3,     3,     6,     5,     5,
-       5,     3,     3,     3,     3,     1,     1,     3,     3,     2,
-       2,     1,     1,     1,     1,     2,     2,     2,     1,     4,
-       4,     0,     5,     2,     3,     4,     5,     4,     5,     2,
-       2,     1,     3,     1,     3,     1,     2,     3,     5,     2,
-       4,     2,     4,     1,     3,     1,     3,     2,     3,     1,
-       3,     1,     4,     3,     3,     3,     3,     2,     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,     3,     5,     3,     5,     6,     5,
-       5,     5,     5,     4,     3,     3,     3,     3,     3,     3,
-       3,     3,     3,     4,     4,     2,     2,     3,     3,     3,
-       3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
-       2,     2,     3,     3,     3,     3,     0,     4,     6,     1,
-       1,     1,     2,     4,     2,     3,     1,     1,     1,     1,
-       1,     2,     2,     4,     1,     4,     3,     2,     4,     6,
-       1,     0,     2,     1,     0,     3,     0,     4,     2,     2,
-       1,     1,     2,     3,     4,     3,     4,     2,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     0,     4,     0,
-       4,     3,     3,     2,     3,     3,     1,     4,     3,     1,
-       0,     6,     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,     2,     1,
-       1,     1,     5,     1,     2,     1,     1,     1,     3,     1,
-       3,     1,     4,     6,     3,     5,     2,     4,     1,     3,
-       4,     2,     6,     2,     2,     4,     1,     1,     1,     3,
-       1,     4,     1,     2,     1,     3,     1,     1,     0,     3,
-       4,     2,     3,     3,     0,     5,     2,     4,     4,     2,
-       4,     4,     3,     3,     3,     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,     0,     2,     0,     2,     1,     0,
-       3,     0,     4,     1,     1,     1,     1,     2,     1,     1,
-       1,     1,     3,     1,     1,     2,     2,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     0,     4,     2,     3,     2,     6,
-       8,     4,     6,     4,     6,     2,     4,     6,     2,     4,
-       2,     4,     1,     0,     1,     1,     1,     1,     1,     1,
-       3,     2,     1,     3,     1,     3,     3,     1,     3,     1,
-       1,     2,     1,     1,     1,     2,     2,     1,     1,     0,
-       4,     1,     2,     1,     3,     3,     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 rule to reduce with in state
-   STATE-NUM 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,     0,     0,     0,     0,   277,
-       0,     0,   529,   298,   301,     0,   321,   322,   323,   324,
-     286,   251,   251,   453,   452,   454,   455,     0,     0,   531,
-      21,     0,   457,   456,   458,   447,   519,   449,   448,   450,
-     451,   443,   444,   408,   461,   462,     0,     0,     0,     0,
-       0,   542,   542,    73,   368,   426,   424,   426,   426,   416,
-     422,     0,     0,     0,     3,   529,     7,    35,    36,    44,
-      43,     0,    61,     0,    65,    75,     0,    41,   229,     0,
-      48,   293,   268,   269,   407,   409,   270,   271,   272,   273,
-     405,   406,   404,   459,   274,     0,   275,   251,     6,     9,
-     321,   322,   286,   289,   386,   531,    97,    98,     0,     0,
-       0,     0,   100,     0,   325,     0,   459,   275,     0,   314,
-     153,   164,   154,   177,   150,   170,   160,   159,   180,   181,
-     175,   158,   157,   152,   178,   182,   183,   162,   151,   165,
-     169,   171,   163,   156,   172,   179,   174,   173,   166,   176,
-     161,   149,   168,   167,   148,   155,   146,   147,   143,   144,
-     145,   102,   104,   103,   138,   139,   135,   117,   118,   119,
-     126,   123,   125,   120,   121,   140,   141,   127,   128,   132,
-     122,   124,   114,   115,   116,   129,   130,   131,   133,   134,
-     136,   137,   142,   509,   316,   105,   106,   508,     0,   173,
-     166,   176,   161,   143,   144,   145,   102,   103,   107,   109,
-     111,    15,   108,   110,     0,     0,    42,     0,     0,     0,
-     459,     0,   275,     0,   538,   539,   529,     0,   540,   530,
-       0,     0,     0,   336,   335,     0,     0,   459,   275,     0,
-       0,     0,     0,   240,   230,   261,    46,   244,   542,   542,
-     513,    47,    45,   531,    60,     0,   542,   385,    59,    39,
-       0,    10,   532,   226,     0,     0,   205,     0,   206,   283,
-       0,     0,   531,    63,   279,     0,   535,   535,   231,     0,
-       0,   535,   511,     0,     0,    71,     0,    81,    88,   295,
-     483,   440,   439,   441,   438,     0,   437,     0,     0,     0,
-       0,     0,     0,     0,   445,   446,    40,   220,   221,     5,
-     530,     0,     0,     0,     0,     0,     0,     0,   374,   376,
-       0,    77,     0,    69,    66,     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,
-       0,     0,     0,   542,     0,     0,     0,   390,   388,   294,
-     410,     0,     0,   379,    53,   292,     0,   311,    97,    98,
-      99,   445,   446,     0,   464,   309,   463,     0,   542,     0,
-       0,     0,   483,   528,   527,   318,   112,     0,   542,   283,
-     327,     0,   326,     0,     0,   542,     0,     0,     0,     0,
-       0,     0,     0,   541,     0,     0,   283,     0,   542,     0,
-     306,   516,   262,   258,     0,     0,   241,   260,     0,   242,
-     531,     0,   288,   254,   253,   252,   531,   239,   238,    12,
-      14,    13,     0,   290,     0,     0,     0,     0,     0,     0,
-     531,   281,    62,   531,   284,   537,   536,   232,   537,   234,
-     285,   512,    87,    79,    74,     0,     0,   542,     0,   489,
-     486,   485,   484,   487,     0,     0,   500,   504,   503,   499,
-     483,     0,   542,   488,   492,   494,   542,   497,   542,   502,
-     542,     0,   482,   428,   431,   429,   442,   427,   411,   425,
-     412,   413,   414,   415,     0,   418,   420,     0,   421,     0,
-       0,     8,    16,    17,    18,    19,    20,    37,    38,   542,
-       0,    25,    33,     0,    34,   531,     0,    67,    78,    24,
-     184,   261,    32,   202,   210,   215,   216,   217,   212,   214,
-     224,   225,   218,   219,   195,   196,   222,   223,   531,   211,
-     213,   207,   208,   209,   197,   198,   199,   200,   201,   520,
-     525,   521,   526,   384,   251,   382,   531,   520,   522,   521,
-     523,   383,   251,   520,   521,   251,   251,   542,   542,    26,
-     186,    31,   194,    51,    54,     0,   466,     0,     0,    97,
-      98,   101,     0,   531,   542,     0,   531,   483,     0,     0,
-       0,     0,   278,   542,   542,   396,   542,   328,   184,   524,
-     282,   531,   520,   521,   542,     0,     0,   305,   330,   299,
-     329,   302,   524,   282,   531,   520,   521,     0,   515,     0,
-     263,   259,   542,   514,   287,   533,    41,     0,   256,   531,
-     250,   542,   235,    11,     0,   227,     0,    23,   193,    64,
-     280,   535,     0,    72,    84,    86,   531,   520,   521,     0,
-       0,   491,   489,     0,   348,   339,   341,   531,   337,   542,
-       0,     0,   369,     0,   371,   362,     0,   475,   507,     0,
-     478,   501,     0,   480,   505,     0,     0,   417,   419,   423,
-     203,   204,   360,   542,     0,   358,   357,   267,     0,    76,
-      70,     0,     0,     0,     0,     0,   381,    57,     0,   387,
-       0,     0,   237,   380,    55,   236,   378,    50,   377,    49,
-       0,     0,     0,   542,   312,     0,     0,   387,   315,   510,
-     531,     0,   468,   319,   113,   397,   398,   542,   399,     0,
-     542,   333,     0,     0,   331,     0,   387,     0,     0,     0,
-     304,     0,     0,     0,     0,   387,     0,   264,   243,     0,
-     531,   255,   247,   531,    22,   233,    80,    82,   490,   496,
-     531,     0,   346,     0,   493,   531,     0,     0,   366,   363,
-     364,   367,   495,   542,   542,   506,   542,   498,   542,   542,
-       0,   433,   434,   435,   430,   436,   542,     0,   542,   542,
-     356,     0,     0,   265,    68,   185,     0,    30,   191,   192,
-      58,   534,     0,    28,   189,    29,   190,    56,     0,     0,
-     187,     0,     0,   465,   310,   467,   317,   483,     0,     0,
-     401,   334,     0,     4,   403,     0,   296,     0,   297,   263,
-     542,     0,     0,   307,   246,   542,   542,   257,   291,   338,
-     349,     0,   344,   340,   370,   373,   372,     0,     0,   471,
-       0,   473,     0,   479,     0,   476,   481,   432,     0,   359,
-     351,   353,     0,   354,   375,   266,   228,    27,   188,   391,
-     389,     0,     0,     0,     0,   400,     0,    89,    96,     0,
-     402,     0,   393,   394,   392,   300,   303,     0,     0,   245,
-     248,     0,   347,     0,   342,   365,   542,   542,   542,   542,
-     361,   542,   542,    52,   313,     0,    95,     0,   542,     0,
-     542,   542,     0,   542,   345,     0,   472,     0,   469,   474,
-     477,     0,   350,   355,   320,   524,    94,   531,   520,   521,
-     395,   332,   308,   249,   343,   542,   542,   387,   470,   352
-};
-
-/* YYDEFGOTO[NTERM-NUM].  */
-static const yytype_int16 yydefgoto[] =
-{
-      -1,     1,     2,   387,   388,    65,    66,   432,   264,    67,
-     217,    68,    69,   574,   713,    70,    71,   272,    72,    73,
-      74,   454,    75,   218,   112,   113,   208,   209,   210,   211,
-     591,   560,   196,    77,   434,   245,   275,   553,   703,   426,
-     427,   628,   254,   255,   425,   629,   750,   247,   416,   248,
-     514,    78,   214,   443,   634,   230,   743,   231,   744,   617,
-     887,   578,   575,   812,   380,   382,   590,   817,   267,   391,
-     609,   733,   734,   236,   655,   656,   657,   786,   684,   685,
-     664,   769,   770,   289,   290,   471,   662,   319,   509,    80,
-      81,   365,   568,   567,   402,   884,   594,   727,   819,   823,
-      82,    83,    84,    85,    86,    87,    88,   301,   494,    89,
-     303,   297,   295,   487,   676,   675,   784,    90,   296,    91,
-      92,   220,    94,   221,   222,   375,   577,   588,   589,   473,
-     474,   475,   476,   477,   478,   479,   480,   481,   775,   667,
-     198,   381,   280,   249,   250,   118,   582,   555,   385,   227,
-     421,   422,   699,   447,   392,   229,    98
-};
-
-/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
-   STATE-NUM.  */
-#define YYPACT_NINF -684
-static const yytype_int16 yypact[] =
-{
-    -684,   102,  2238,  -684,  6205,  8167,  8482,  4620,  5744,  -684,
-    7186,  7186,  4378,  -684,  -684,  8272,  6314,  6314,  -684,  -684,
-    6314,  2735,  2342,  -684,  -684,  -684,  -684,  7186,  5615,    -7,
-    -684,    13,  -684,  -684,  -684,  4742,  2473,  -684,  -684,  4866,
-    -684,  -684,  -684,  -684,  -684,  -684,  7949,  7949,    92,  3755,
-    7186,  6859,  7295,  5995,  -684,  5486,  -684,  -684,  -684,    27,
-      46,    75,  8058,  7949,  -684,   368,   822,   386,  -684,  -684,
-     163,   105,  -684,    64,  8377,  -684,   175,  2325,   366,   380,
-      36,    69,  -684,  -684,   140,  -684,  -684,  -684,  -684,  -684,
-    -684,  -684,  -684,   404,  -684,   212,   534,    98,  -684,   822,
-    -684,  -684,  -684,   170,   184,    -7,   364,   400,  7186,    73,
-    3890,   416,  -684,    85,  -684,   395,  -684,  -684,    98,  -684,
-    -684,  -684,  -684,  -684,  -684,  -684,  -684,  -684,  -684,  -684,
-    -684,  -684,  -684,  -684,  -684,  -684,  -684,  -684,  -684,  -684,
-    -684,  -684,  -684,  -684,  -684,  -684,  -684,    60,   193,   196,
-     244,  -684,  -684,  -684,  -684,  -684,  -684,  -684,   254,   279,
-     285,   309,  -684,   330,  -684,  -684,  -684,  -684,  -684,  -684,
-    -684,  -684,  -684,  -684,  -684,  -684,  -684,  -684,  -684,  -684,
-    -684,  -684,  -684,  -684,  -684,  -684,  -684,  -684,  -684,  -684,
-    -684,  -684,  -684,  -684,  -684,  -684,  -684,  -684,   333,  -684,
-    -684,  -684,  -684,  -684,  -684,  -684,  -684,  -684,  -684,  -684,
-    -684,   189,  -684,  -684,  3132,   301,   386,    90,   258,   426,
-      24,   304,   177,    90,  -684,  -684,   368,   392,  -684,   260,
-    7186,  7186,   374,  -684,  -684,   435,   417,    87,   112,  7949,
-    7949,  7949,  7949,  -684,  2325,   332,  -684,  -684,   318,   334,
-    -684,  -684,  -684,  4269,  -684,  6423,  6314,  -684,  -684,  -684,
-     298,  -684,  -684,   365,   390,  4025,  -684,   445,   444,   551,
-    3755,   403,    -7,   430,   386,   391,     6,   136,  -684,   332,
-     420,   136,  -684,   485,  8587,   419,   483,   508,   521,  -684,
-    1055,  -684,  -684,  -684,  -684,   222,  -684,   280,   340,    81,
-     447,   396,   451,    77,   482,   490,  -684,  -684,  -684,  -684,
-    4487,  7186,  7186,  7186,  7186,  6205,  7186,  7186,  -684,  -684,
-    7404,  -684,  3755,  6100,   421,  7404,  7949,  7949,  7949,  7949,
-    7949,  7949,  7949,  7949,  7949,  7949,  7949,  7949,  7949,  7949,
-    7949,  7949,  7949,  7949,  7949,  7949,  7949,  7949,  7949,  7949,
-    7949,  7949,  8749,  6314,  8822,  9625,  9625,  -684,  -684,  -684,
-    -684,  8058,  8058,  -684,   465,  -684,   365,   386,  -684,   550,
-    -684,  -684,  -684,   368,  -684,  -684,  -684,  8895,  6314,  8968,
-    3132,  7186,  1072,  -684,  -684,  -684,  -684,   552,   558,   192,
-    -684,  3267,   554,  7949,  9041,  6314,  9114,  7949,  7949,  3537,
-     392,  7513,   560,  -684,   113,   113,   122,  9187,  6314,  9260,
-    -684,  -684,  -684,  -684,  7949,  6532,  -684,  -684,  6968,  -684,
-      -7,   439,  -684,  6641,  -684,  -684,    -7,  -684,  -684,  -684,
-    -684,  -684,  5744,  -684,  7949,  4025,   492,  9041,  9114,  7949,
-      -7,  -684,   495,    -7,  -684,  7077,  -684,  -684,  7295,  -684,
-    -684,  -684,   550,  -684,   503,  8587,  9333,  6314,  9406,   181,
-    -684,  -684,  -684,  -684,   568,   572,  -684,  -684,  -684,  -684,
-    1158,    71,   499,  -684,  -684,  -684,   512,  -684,   514,   593,
-     516,   599,  -684,  -684,  -684,  -684,  -684,  -684,  -684,  -684,
-    -684,  -684,  -684,  -684,    52,  -684,  -684,   519,  -684,  7949,
-    7949,   822,  -684,  -684,  -684,  -684,  -684,  -684,  -684,    39,
-    7949,  -684,   526,   527,  -684,    -7,  8587,   532,  -684,  -684,
-    1888,  -684,  -684,   444,  2718,  2718,  2718,  2718,  1291,  1291,
-    9765,  2587,  2718,  2718,  2456,  2456,   229,   229,  9689,  1291,
-    1291,   718,   718,   776,   217,   217,   444,   444,   444,  2866,
-    5234,  2997,  5356,  -684,   184,  -684,    -7,   565,  -684,   609,
-    -684,  -684,  2604,  -684,  -684,  1810,  1810,    39,    39,  -684,
-    2844,  -684,  2325,  -684,  -684,   368,  -684,  7186,  3132,   414,
-      47,  -684,   184,    -7,   184,   656,   133,  1158,  3132,   368,
-    5873,  5744,  -684,  7622,   657,  -684,   472,  -684,  2975,  4990,
-    5112,    -7,   246,   266,   657,   670,    96,  -684,  -684,  -684,
-    -684,  -684,    67,   126,    -7,   127,   129,  7186,  -684,  7949,
-     332,  -684,   334,  -684,  -684,  -684,  9744,    74,  -684,    -7,
-    -684,   334,  -684,  -684,  7186,  2325,   556,  -684,  2325,   162,
-    -684,   136,  8587,   503,   414,    47,    -7,    63,    72,   632,
-    7949,  -684,   598,   572,   545,  -684,   563,    -7,  -684,   499,
-    4160,  4025,  -684,   710,  -684,  -684,  1158,  -684,  -684,  1158,
-    -684,  -684,   935,  -684,  -684,  4025,   742,  -684,  -684,  -684,
-     444,   444,  -684,   726,  4160,  -684,  -684,   564,  7731,  -684,
-     503,  8587,  7949,   586,  8058,  7949,  -684,   465,   577,   613,
-    8058,  8058,  -684,  -684,   465,  -684,  -684,  -684,  -684,  -684,
-    4160,  4025,  7949,    39,  -684,   368,   709,  -684,  -684,  -684,
-      -7,   711,  -684,  -684,  -684,   526,  -684,   635,  -684,  3646,
-     715,  -684,  7186,   719,  -684,  7949,   347,  7949,  7949,   721,
-    -684,  7840,  3402,  4160,  4160,   130,   113,  -684,  -684,  6750,
-      -7,  -684,  -684,   133,  -684,  -684,  -684,   378,  -684,  -684,
-      -7,   957,   590,   658,  -684,    -7,   722,   606,  -684,   595,
-    -684,  -684,  -684,   607,   608,  -684,   614,  -684,   616,   614,
-     621,  -684,  -684,  -684,  -684,  -684,   499,   622,   619,   624,
-    -684,   745,  7949,   626,   503,  2325,  7949,  -684,  2325,  2325,
-    -684,  -684,  8058,  -684,  2325,  -684,  2325,  -684,   749,   625,
-    2325,  4025,  3132,  -684,  -684,  -684,  -684,  1072,  8692,    90,
-    -684,  -684,  4160,  -684,  -684,    90,  -684,  7949,  -684,  -684,
-     281,   762,   763,  -684,  -684,   645,   334,  -684,  -684,  -684,
-     646,   957,   649,  -684,  -684,  -684,  -684,   710,  1158,  -684,
-     935,  -684,   935,  -684,   935,  -684,  -684,  -684,   663,  -684,
-    1231,  -684,   935,  -684,  -684,   655,  2325,  -684,  2325,  -684,
-    -684,   662,   780,  3132,   739,  -684,   562,   508,   521,  3132,
-    -684,  3267,  -684,  -684,  -684,  -684,  -684,  4160,  6532,  -684,
-    -684,   957,   646,   957,   668,  -684,   614,   677,   614,   614,
-    -684,   678,   614,  -684,  -684,   801,   550,  9479,  6314,  9552,
-     558,   472,   802,   334,   646,   957,  -684,   935,  -684,  -684,
-    -684,   935,  -684,  -684,  -684,    86,    47,    -7,   106,   109,
-    -684,  -684,  -684,  -684,   646,   614,   614,   110,  -684,  -684
-};
-
-/* YYPGOTO[NTERM-NUM].  */
-static const yytype_int16 yypgoto[] =
-{
-    -684,  -684,  -684,  -375,  1353,  -684,    25,  -684,  -684,   992,
-      31,   -31,  -684,  -339,  -684,    21,   798,  -172,   -15,   -73,
-    -684,  -411,   -20,  1315,   -60,   808,    14,  -684,    -4,  -684,
-    -684,     4,  -684,   741,  -684,   529,  -684,    23,   -44,  -291,
-      51,  -684,    17,  -684,  -684,  -684,  -684,  -357,  -226,   -32,
-    -269,    11,  -684,  -684,  -684,  -684,  -684,  -684,  -684,  -684,
-    -684,  -684,  -684,  -684,  -684,  -684,  -684,  -684,    -2,  -203,
-    -383,   -92,  -539,  -684,  -683,  -677,   171,  -684,  -478,  -684,
-    -576,  -684,   -24,  -684,  -684,  -684,  -684,  -684,  -684,  -684,
-    -684,   746,  -684,  -684,  -372,  -684,   -84,  -684,  -684,  -684,
-    -684,  -684,  -684,   744,  -684,  -684,  -684,  -684,  -684,  -684,
-    -684,  -684,   487,  -222,  -684,  -684,  -684,    -1,  -684,    22,
-    -684,   911,   823,  1336,  1244,  -684,  -684,    16,  -255,  -611,
-    -165,  -620,  -482,  -599,   174,  -684,  -573,  -684,  -233,   161,
-    -684,  -684,  -684,     2,  -290,   157,  -278,  -684,  -684,     8,
-     -23,   245,  -520,  -241,    79,   778,   904
-};
-
-/* 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 zero, do what YYDEFACT says.
-   If YYTABLE_NINF, syntax error.  */
-#define YYTABLE_NINF -543
-static const yytype_int16 yytable[] =
-{
-      79,   324,    79,   115,   115,   585,   263,   212,   219,   219,
-     219,   195,   195,   235,   219,   219,   114,   114,   219,   276,
-     399,   194,   611,   419,   261,   219,   114,   212,   605,    99,
-     213,   306,   195,   285,   273,   472,   449,   243,   243,   258,
-     451,   243,   223,   226,   643,   257,   772,    79,   219,   370,
-     213,   286,   771,   277,   281,   730,   522,   482,   621,   195,
-     219,   621,   556,   717,   114,   739,   630,   246,   251,   294,
-     777,   252,   286,   309,   554,   489,   562,   565,   566,   495,
-     843,   736,   366,   765,   840,   114,   373,   583,   -83,   710,
-     711,   228,   -92,   774,   745,   357,   778,   -85,   440,   -92,
-     660,   584,     3,   390,   601,   690,   219,   787,    79,   390,
-     789,  -460,   -89,   483,   364,   682,   554,   614,   562,   -91,
-     363,   355,   -93,   -90,   357,   368,   757,   257,   623,   369,
-     262,   584,  -282,   -89,   304,   305,   445,   -96,   497,   265,
-     608,   363,   483,   446,   228,  -453,   491,   -95,   269,   482,
-     515,   -94,   -91,   683,   -93,   -90,   484,   485,   623,    97,
-     584,    97,   414,   300,   892,   356,   646,    97,    97,    97,
-     316,   317,   -83,    97,    97,  -282,  -282,    97,   661,  -521,
-     584,   -85,   302,   498,    97,   484,   485,   776,   677,  -453,
-     779,   318,   376,   -83,   321,   358,   -83,   -84,   374,  -520,
-     -83,   788,   -85,   716,   749,   -85,    97,    97,   843,   -85,
-     858,   453,    79,   721,   320,   659,   914,   -81,  -520,    97,
-     224,   -92,   225,   -92,   358,   224,   741,   225,   219,   219,
-     256,   224,   772,   225,   400,   811,   771,   482,   934,    56,
-     772,   -91,   -88,   -91,   -93,   -90,   -93,   -90,   224,   777,
-     225,   219,   -87,   219,   219,   273,   -86,   -83,  -521,   -85,
-     -82,   404,   405,    79,   398,    97,   448,    97,    79,   649,
-     262,   -62,   678,   446,   243,   897,   243,   243,  -452,   439,
-     794,  -454,   286,   483,   325,   326,   -96,   901,   513,   511,
-     650,   882,   -76,   513,   519,   114,   729,   326,   401,   361,
-     658,   -95,   253,   517,   420,   228,   424,   273,    79,   219,
-     219,   219,   219,    79,   219,   219,   256,   581,   219,   386,
-      79,   286,  -452,   219,   726,  -454,   484,   485,   486,  -455,
-     569,   571,   720,   737,   114,   501,   349,   350,   351,  -457,
-     506,   483,   502,   503,   504,   505,   347,   348,   349,   350,
-     351,   219,   429,   738,   482,   -91,   552,   389,   800,   219,
-     219,   430,   431,   833,  -456,   807,   896,   393,   898,   606,
-    -458,    97,   899,  -455,   243,   -93,   219,   561,    79,   219,
-     902,   552,   453,  -457,   484,   485,   488,    97,    97,    79,
-    -517,   397,   834,   219,  -447,   403,   748,    79,   552,   243,
-     755,   483,   561,   742,  -387,   752,   219,   937,  -456,   401,
-      97,   552,    97,    97,  -458,  -450,   243,   622,   383,   561,
-     414,   219,    97,   316,   317,   631,  -518,    97,   633,   243,
-     406,   212,   561,    79,   827,   935,   195,   872,  -447,   936,
-    -524,   552,   410,   453,   484,   485,   490,   641,   415,  -447,
-     790,  -325,   576,   286,   213,   219,   -90,   483,   883,  -450,
-     552,   561,   384,  -387,   418,   352,   114,    97,    97,    97,
-      97,    97,    97,    97,    97,   371,   372,    97,   243,    97,
-     377,   561,    97,   610,   610,  -450,   732,   729,   658,   762,
-    -517,  -460,  -447,  -447,  -325,  -325,  -517,   433,   905,  -524,
-     484,   485,   493,   224,  -387,   225,  -387,  -387,   353,   354,
-      97,   394,   326,   -89,   286,   693,   435,   442,    97,    97,
-     407,   706,   708,   378,   379,   444,  -518,   114,  -450,  -450,
-     437,   621,  -518,   698,   -81,    97,   441,    97,    97,   -61,
-    -524,   452,  -524,  -524,   298,   299,  -520,   450,    97,   455,
-     499,   518,    97,   492,   395,   396,    97,   496,   500,   573,
-     698,   513,   592,   408,   409,    97,   593,   597,   456,   756,
-     607,   697,   625,   395,   438,   219,    79,   696,   698,   704,
-      97,   279,   707,   709,   482,   702,    79,   724,   702,   702,
-     212,   698,    97,  -459,   195,   195,   658,   652,   658,   460,
-     461,   462,   463,   464,   723,   696,  -275,   702,   715,   889,
-     890,   457,   458,   213,    97,   219,   879,   927,   453,   637,
-     651,   362,   881,   698,   652,   -76,   460,   461,   462,   463,
-     464,   584,   219,   642,   663,  -283,  -459,  -459,   439,   670,
-     286,   673,   666,   -96,   669,   671,   672,   907,   746,  -275,
-    -275,   674,   700,   114,   714,   679,  -261,   688,    79,    79,
-     -95,   653,   691,   797,   -88,   624,   718,   654,   722,   803,
-     805,   632,   729,    79,   -91,   761,   658,   894,  -283,  -283,
-     740,   -87,    79,   754,   758,   639,   649,   933,   640,   286,
-     908,   909,   219,   763,  -262,   -83,   701,   796,   219,   219,
-     802,   652,   114,   460,   461,   462,   463,   464,    79,    79,
-     652,   801,   460,   461,   462,   463,   464,   835,   -93,   814,
-     841,   816,   -90,   818,   822,   847,   658,    79,   658,   826,
-     219,   828,   845,   846,    97,    97,   859,   848,   850,   -85,
-      79,    79,    79,   -82,   852,    97,   854,   653,   857,   860,
-     658,   836,   870,   842,   862,   864,  -263,   244,   244,   869,
-     689,   244,   768,   825,   460,   461,   462,   463,   411,   412,
-     413,   867,   885,   886,    97,   888,   891,   900,   652,   893,
-     460,   461,   462,   463,   464,  -264,   326,   266,   268,   903,
-     904,    97,   244,   244,   813,   906,   781,   782,   915,   783,
-     219,   339,   340,   307,   308,    44,    45,   917,   921,    79,
-      79,   924,   932,   233,   119,   465,   876,    97,    97,   931,
-      79,   466,   467,   895,   760,   610,   930,   359,   360,   114,
-     197,   719,    97,   873,   346,   347,   348,   349,   350,   351,
-     773,    97,   468,   310,   326,   469,     0,     0,     0,   512,
-       0,    97,     0,     0,   521,     0,     0,    97,    97,   339,
-     340,   663,   311,   312,   313,   314,   315,    97,    97,     0,
-       0,    79,     0,     0,   751,     0,     0,    79,     0,    79,
-       0,     0,     0,     0,     0,    79,    97,     0,     0,    97,
-     913,     0,     0,   347,   348,   349,   350,   351,     0,    97,
-      97,    97,   764,     0,   698,     0,   219,     0,     0,     0,
-       0,   552,     0,    93,     0,    93,   116,   116,   116,     0,
-       0,     0,     0,     0,     0,     0,   237,     0,     0,   243,
-     521,     0,   561,     0,   849,   851,     0,   853,     0,   855,
-     856,     0,     0,   618,   620,     0,     0,   279,     0,   861,
-     863,     0,   627,     0,     0,   278,   282,     0,     0,    97,
-      93,     0,     0,     0,   287,   815,     0,     0,    97,    97,
-       0,     0,     0,     0,   620,     0,     0,   279,     0,    97,
-     244,   244,   244,   307,     0,   287,     0,   652,     0,   460,
-     461,   462,   463,   464,   244,   837,   244,   244,   838,     0,
-       0,     0,   216,   216,   216,   839,     0,     0,     0,   652,
-     844,   460,   461,   462,   463,   464,     0,     0,     0,   259,
-       0,    93,     0,     0,   465,     0,     0,     0,     0,     0,
-      97,   467,     0,     0,     0,     0,    97,     0,    97,   687,
-       0,     0,   274,     0,    97,     0,   653,     0,     0,     0,
-       0,   468,     0,     0,     0,     0,     0,   916,   918,   919,
-     920,   244,   922,   923,     0,    97,   520,   523,   524,   525,
-     526,   527,   528,   529,   530,   531,   532,   533,   534,   535,
-     536,   537,   538,   539,   540,   541,   542,   543,   544,   545,
-     546,   547,   548,     0,   244,     0,   938,   939,     0,     0,
-     367,     0,   570,   572,     0,     0,     0,   459,     0,   460,
-     461,   462,   463,   464,     0,     0,     0,     0,     0,   244,
-       0,     0,   725,     0,   459,    93,   460,   461,   462,   463,
-     464,     0,     0,     0,   598,     0,   244,     0,   570,   572,
-       0,     0,   244,     0,   465,     0,     0,     0,   747,   244,
-     466,   467,   417,   417,     0,   244,   244,     0,     0,   244,
-     428,   465,     0,     0,   626,     0,     0,   466,   467,     0,
-       0,   468,     0,     0,   469,   635,    93,     0,     0,   759,
-     638,    93,     0,     0,     0,     0,   244,   470,   468,   244,
-       0,   469,     0,     0,     0,   287,     0,     0,   244,     0,
-       0,     0,     0,     0,   587,     0,     0,     0,     0,     0,
-     459,     0,   460,   461,   462,   463,   464,   793,     0,     0,
-       0,    93,   216,   216,     0,     0,    93,     0,     0,     0,
-       0,     0,     0,    93,   287,     0,     0,     0,     0,     0,
-     680,   681,     0,     0,     0,     0,    96,   465,    96,   117,
-     117,   244,     0,   466,   467,     0,     0,   428,     0,   238,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     829,     0,     0,     0,   468,     0,     0,   469,     0,     0,
-       0,     0,   428,   652,     0,   460,   461,   462,   463,   464,
-       0,    93,   595,    96,     0,     0,     0,   288,     0,   428,
-       0,     0,    93,   216,   216,   216,   216,     0,   507,   508,
-      93,     0,   428,     0,     0,     0,     0,    76,   288,    76,
-     465,   865,     0,     0,     0,     0,   466,   467,     0,     0,
-     234,     0,     0,     0,   244,     0,     0,     0,    95,     0,
-      95,     0,     0,     0,     0,     0,    93,   468,     0,     0,
-     469,     0,     0,     0,    96,    64,     0,     0,     0,   326,
-     244,   428,     0,     0,    76,     0,   287,     0,     0,     0,
-       0,     0,     0,   586,   339,   340,   665,     0,     0,     0,
-     668,     0,   668,     0,   668,    95,     0,     0,     0,     0,
-       0,   244,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   271,     0,     0,   344,   345,   346,   347,   348,
-     349,   350,   351,   686,     0,   274,     0,   620,     0,     0,
-       0,     0,     0,     0,     0,    76,     0,   287,     0,   244,
-       0,     0,     0,   795,     0,   798,   799,     0,     0,     0,
-       0,   804,   806,     0,     0,     0,    95,     0,     0,     0,
-       0,     0,     0,   810,     0,     0,     0,     0,    96,     0,
-       0,     0,     0,   271,     0,     0,   705,     0,     0,   705,
-     705,   686,   686,     0,     0,     0,   798,     0,   804,   806,
-       0,     0,   244,     0,     0,     0,     0,     0,   705,    93,
-     244,     0,     0,     0,     0,     0,     0,   728,   731,    93,
-     731,     0,     0,     0,     0,     0,     0,     0,   731,    96,
-       0,     0,     0,     0,    96,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   417,     0,   288,    76,
-       0,     0,     0,   244,     0,   417,     0,   866,     0,     0,
-       0,     0,     0,   868,     0,     0,     0,     0,     0,     0,
-      95,     0,     0,   287,    96,     0,     0,     0,     0,    96,
-       0,     0,     0,   665,     0,     0,    96,   288,   868,   216,
-       0,    93,    93,     0,     0,     0,     0,     0,     0,     0,
-      76,     0,     0,     0,     0,    76,    93,   665,     0,     0,
-       0,     0,     0,     0,     0,    93,     0,     0,     0,     0,
-       0,    95,   287,     0,     0,     0,    95,     0,     0,   216,
-       0,     0,     0,     0,     0,     0,     0,   686,   436,     0,
-       0,    93,    93,   271,    96,    76,   753,     0,     0,   244,
-      76,   820,     0,     0,   824,    96,     0,    76,     0,     0,
-      93,     0,     0,    96,     0,     0,    95,     0,     0,   244,
-       0,    95,     0,    93,    93,    93,     0,     0,    95,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   271,     0,   668,   668,    96,
-     668,     0,   668,   668,     0,     0,     0,     0,     0,     0,
-     665,     0,   668,   668,     0,    76,     0,     0,     0,   288,
-       0,     0,     0,     0,     0,     0,    76,     0,     0,     0,
-       0,     0,     0,     0,    76,     0,    95,     0,     0,     0,
-       0,     0,    93,    93,   216,     0,     0,    95,     0,   877,
-       0,     0,     0,    93,   731,    95,     0,     0,     0,   417,
-     417,     0,     0,     0,   596,     0,     0,     0,     0,     0,
-      76,     0,   604,     0,     0,     0,     0,     0,     0,     0,
-     288,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    95,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    93,     0,     0,     0,   636,     0,
-      93,     0,    93,     0,     0,     0,     0,     0,    93,     0,
-     668,   668,   668,   668,     0,   668,   668,     0,     0,     0,
-    -542,     0,   428,     0,   595,   731,     0,   417,  -542,  -542,
-    -542,     0,    96,  -542,  -542,  -542,     0,  -542,     0,     0,
-       0,     0,    96,     0,     0,     0,     0,  -542,     0,   668,
-     668,     0,     0,     0,     0,     0,     0,  -542,  -542,     0,
-    -542,  -542,  -542,  -542,  -542,     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,
-       0,     0,     0,     0,     0,     0,   288,     0,     0,     0,
-       0,     0,     0,    76,     0,  -542,     0,     0,     0,     0,
-       0,     0,     0,    76,    96,    96,     0,     0,     0,     0,
-       0,     0,     0,     0,    95,     0,     0,     0,     0,    96,
-     785,     0,     0,     0,    95,     0,     0,     0,    96,     0,
-       0,     0,   692,     0,     0,   288,     0,  -542,     0,  -542,
-       0,     0,   256,  -542,     0,  -542,     0,  -542,     0,     0,
-       0,     0,     0,     0,    96,    96,   326,   327,   328,   329,
-     330,   331,   332,   333,   334,   335,   336,   337,   338,     0,
-       0,   339,   340,    96,     0,    76,    76,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    96,    96,    96,     0,
-      76,     0,     0,     0,     0,     0,    95,    95,   341,    76,
-     342,   343,   344,   345,   346,   347,   348,   349,   350,   351,
-       0,    95,     0,   766,   767,     0,     0,     0,  -230,     0,
-      95,     0,     0,     0,     0,    76,    76,     0,   780,     0,
-       0,     0,     0,     0,     0,     0,     0,   791,     0,     0,
-       0,     0,     0,     0,    76,     0,    95,    95,     0,     0,
-       0,     0,     0,     0,     0,    96,    96,    76,    76,    76,
-       0,     0,   878,   808,   809,    95,    96,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    95,    95,
-      95,     0,   821,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   830,   831,   832,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    96,     0,     0,
-       0,     0,     0,    96,     0,    96,    76,    76,     0,     0,
-       0,    96,     0,   875,     0,     0,     0,    76,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    95,    95,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    95,     0,
-       0,     0,     0,     0,   871,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   880,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    76,     0,
-       0,     0,     0,     0,    76,     0,    76,     0,     0,     0,
-       0,     0,    76,     0,     0,     0,     0,     0,     0,    95,
-       0,     0,     0,     0,     0,    95,     0,    95,     0,     0,
-       0,     0,     0,    95,     0,     0,     0,     0,     0,     0,
-       0,     0,   910,     0,   911,     0,     0,     0,  -542,     4,
-     912,     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,     0,
-      43,    44,    45,     0,    46,    47,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    48,     0,     0,    49,    50,     0,
-      51,    52,     0,    53,     0,    54,    55,    56,    57,    58,
-      59,    60,  -386,     0,     0,     0,     0,     0,     0,     0,
-    -386,  -386,  -386,     0,     0,  -386,  -386,  -386,     0,  -386,
-      61,    62,    63,     0,     0,     0,     0,     0,  -386,  -386,
-    -386,     0,     0,  -542,     0,  -542,     0,     0,     0,  -386,
-    -386,     0,  -386,  -386,  -386,  -386,  -386,     0,     0,     0,
-       0,     0,     0,   326,   327,   328,   329,   330,   331,   332,
-     333,   334,   335,   336,   337,   338,     0,     0,   339,   340,
-    -386,  -386,  -386,  -386,  -386,  -386,  -386,  -386,  -386,  -386,
-    -386,  -386,  -386,     0,     0,  -386,  -386,  -386,     0,     0,
-    -386,     0,     0,     0,     0,   341,  -386,   342,   343,   344,
-     345,   346,   347,   348,   349,   350,   351,     0,     0,     0,
-       0,     0,  -386,     0,  -386,  -386,  -386,  -386,  -386,  -386,
-    -386,  -386,  -386,  -386,     0,     0,     0,     0,  -386,  -386,
-    -386,  -386,  -386,  -276,   256,  -386,  -386,  -386,     0,  -386,
-       0,  -276,  -276,  -276,     0,     0,  -276,  -276,  -276,     0,
-    -276,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-    -276,  -276,  -276,     0,     0,     0,     0,     0,     0,     0,
-    -276,  -276,     0,  -276,  -276,  -276,  -276,  -276,     0,     0,
-       0,     0,     0,     0,   326,   327,   328,   329,   330,   331,
-     332,   333,   334,   335,   336,  -543,  -543,     0,     0,   339,
-     340,  -276,  -276,  -276,  -276,  -276,  -276,  -276,  -276,  -276,
-    -276,  -276,  -276,  -276,     0,     0,  -276,  -276,  -276,     0,
-       0,  -276,     0,     0,     0,     0,     0,  -276,   342,   343,
-     344,   345,   346,   347,   348,   349,   350,   351,     0,     0,
-    -276,     0,     0,  -276,  -276,  -276,  -276,  -276,  -276,  -276,
-    -276,  -276,  -276,  -276,  -276,     0,     0,     0,     0,     0,
-    -276,  -276,  -276,  -276,  -542,     0,  -276,  -276,  -276,     0,
-    -276,     0,  -542,  -542,  -542,     0,     0,  -542,  -542,  -542,
-       0,  -542,     0,     0,     0,     0,     0,     0,     0,     0,
-    -542,  -542,  -542,     0,     0,     0,     0,     0,     0,     0,
-       0,  -542,  -542,     0,  -542,  -542,  -542,  -542,  -542,     0,
-       0,     0,     0,     0,     0,   326,   327,   328,   329,   330,
-     331,   332,   333,     0,   335,   336,     0,     0,     0,     0,
-     339,   340,  -542,  -542,  -542,  -542,  -542,  -542,  -542,  -542,
-    -542,  -542,  -542,  -542,  -542,     0,     0,  -542,  -542,  -542,
-       0,     0,  -542,     0,     0,     0,     0,     0,  -542,   342,
-     343,   344,   345,   346,   347,   348,   349,   350,   351,     0,
-       0,     0,     0,     0,  -542,     0,  -542,  -542,  -542,  -542,
-    -542,  -542,  -542,  -542,  -542,  -542,     0,     0,     0,     0,
-    -542,  -542,  -542,  -542,  -542,  -289,   256,  -542,  -542,  -542,
-       0,  -542,     0,  -289,  -289,  -289,     0,     0,  -289,  -289,
-    -289,     0,  -289,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,  -289,  -289,     0,     0,     0,     0,     0,     0,
-       0,     0,  -289,  -289,     0,  -289,  -289,  -289,  -289,  -289,
-       0,     0,     0,     0,     0,     0,   326,  -543,  -543,  -543,
-    -543,   331,   332,     0,     0,  -543,  -543,     0,     0,     0,
-       0,   339,   340,  -289,  -289,  -289,  -289,  -289,  -289,  -289,
-    -289,  -289,  -289,  -289,  -289,  -289,     0,     0,  -289,  -289,
-    -289,     0,     0,  -289,     0,     0,     0,     0,     0,  -289,
-     342,   343,   344,   345,   346,   347,   348,   349,   350,   351,
-       0,     0,     0,     0,     0,  -289,     0,  -289,  -289,  -289,
-    -289,  -289,  -289,  -289,  -289,  -289,  -289,     0,     0,     0,
-       0,     0,  -289,  -289,  -289,  -289,  -524,   253,  -289,  -289,
-    -289,     0,  -289,     0,  -524,  -524,  -524,     0,     0,     0,
-    -524,  -524,     0,  -524,     0,     0,     0,     0,   712,     0,
-       0,     0,  -524,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,  -524,  -524,     0,  -524,  -524,  -524,  -524,
-    -524,     0,   326,   327,   328,   329,   330,   331,   332,   333,
-     334,   335,   336,   337,   338,     0,     0,   339,   340,     0,
-       0,     0,     0,     0,  -524,  -524,  -524,  -524,  -524,  -524,
-    -524,  -524,  -524,  -524,  -524,  -524,  -524,     0,     0,  -524,
-    -524,  -524,     0,   694,   341,     0,   342,   343,   344,   345,
-     346,   347,   348,   349,   350,   351,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   -92,  -524,     0,  -524,  -524,
-    -524,  -524,  -524,  -524,  -524,  -524,  -524,  -524,     0,     0,
-       0,     0,  -524,  -524,  -524,  -524,   -84,  -282,     0,  -524,
-       0,  -524,     0,  -524,     0,  -282,  -282,  -282,     0,     0,
-       0,  -282,  -282,     0,  -282,     0,     0,     0,     0,   692,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,  -282,  -282,     0,  -282,  -282,  -282,
-    -282,  -282,     0,   326,   327,   328,   329,   330,   331,   332,
-     333,   334,   335,   336,   337,   338,     0,     0,   339,   340,
-       0,     0,     0,     0,     0,  -282,  -282,  -282,  -282,  -282,
-    -282,  -282,  -282,  -282,  -282,  -282,  -282,  -282,     0,     0,
-    -282,  -282,  -282,     0,   695,   341,     0,   342,   343,   344,
-     345,   346,   347,   348,   349,   350,   351,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   -94,  -282,     0,  -282,
-    -282,  -282,  -282,  -282,  -282,  -282,  -282,  -282,  -282,     0,
-       0,     0,     0,     0,  -282,  -282,  -282,   -86,     0,     0,
-    -282,     0,  -282,     4,  -282,     5,     6,     7,     8,     9,
-    -542,  -542,  -542,    10,    11,     0,     0,  -542,    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,     0,    43,    44,    45,     0,    46,    47,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    48,     0,
-       0,    49,    50,     0,    51,    52,     0,    53,     0,    54,
-      55,    56,    57,    58,    59,    60,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    61,    62,    63,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,  -542,     4,  -542,
-       5,     6,     7,     8,     9,     0,     0,  -542,    10,    11,
-       0,  -542,  -542,    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,     0,    43,
-      44,    45,     0,    46,    47,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    48,     0,     0,    49,    50,     0,    51,
-      52,     0,    53,     0,    54,    55,    56,    57,    58,    59,
-      60,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    61,
-      62,    63,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,  -542,     4,  -542,     5,     6,     7,     8,     9,
-       0,     0,  -542,    10,    11,     0,     0,  -542,    12,  -542,
-      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,     0,    43,    44,    45,     0,    46,    47,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    48,     0,
-       0,    49,    50,     0,    51,    52,     0,    53,     0,    54,
-      55,    56,    57,    58,    59,    60,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    61,    62,    63,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,  -542,     4,  -542,
-       5,     6,     7,     8,     9,     0,     0,  -542,    10,    11,
-       0,     0,  -542,    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,     0,    43,
-      44,    45,     0,    46,    47,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    48,     0,     0,    49,    50,     0,    51,
-      52,     0,    53,     0,    54,    55,    56,    57,    58,    59,
-      60,     0,     0,     0,     0,     0,     0,     4,     0,     5,
-       6,     7,     8,     9,     0,  -542,  -542,    10,    11,    61,
-      62,    63,    12,     0,    13,    14,    15,    16,    17,    18,
-      19,     0,  -542,     0,  -542,     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,     0,    43,    44,
-      45,     0,    46,    47,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    48,     0,     0,    49,    50,     0,    51,    52,
-       0,    53,     0,    54,    55,    56,    57,    58,    59,    60,
-       0,     0,     0,     0,     0,     0,     4,     0,     5,     6,
-       7,     8,     9,     0,     0,     0,    10,    11,    61,    62,
-      63,    12,     0,    13,    14,    15,    16,    17,    18,    19,
-       0,  -542,     0,  -542,     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,     0,    43,    44,    45,
-       0,    46,    47,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    48,     0,     0,   270,    50,     0,    51,    52,     0,
-      53,     0,    54,    55,    56,    57,    58,    59,    60,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    61,    62,    63,
-       0,     0,     0,     0,     0,     0,     0,     0,  -542,     0,
-    -542,     4,  -542,     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,     0,    43,    44,    45,     0,    46,    47,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    48,     0,     0,    49,
-      50,     0,    51,    52,     0,    53,     0,    54,    55,    56,
-      57,    58,    59,    60,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    61,    62,    63,     0,     0,     0,     0,     0,
-       0,     0,     0,  -542,     0,  -542,     4,  -542,     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,     0,    43,    44,    45,
-       0,    46,    47,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    48,     0,     0,    49,    50,     0,    51,    52,     0,
-      53,     0,    54,    55,    56,    57,    58,    59,    60,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    61,    62,    63,
-       0,     0,  -542,     0,     0,     0,     0,     0,     0,     0,
-    -542,     4,  -542,     5,     6,     7,     8,     9,     0,     0,
-    -542,    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,     0,    43,    44,    45,     0,    46,    47,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    48,     0,     0,    49,
-      50,     0,    51,    52,     0,    53,     0,    54,    55,    56,
-      57,    58,    59,    60,     0,     0,     0,     0,     0,     0,
-       0,     0,     5,     6,     7,     0,     9,     0,     0,     0,
-      10,    11,    61,    62,    63,    12,     0,    13,    14,    15,
-     100,   101,    18,    19,     0,  -542,     0,  -542,     0,   102,
-      21,    22,    23,    24,    25,    26,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    29,     0,     0,    32,    33,
-      34,    35,    36,    37,    38,    39,    40,   239,    41,    42,
-       0,    43,    44,    45,     0,    46,    47,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   215,     0,     0,   110,    50,
-       0,    51,    52,     0,   240,   241,    54,    55,    56,    57,
-      58,    59,    60,     0,     0,     0,     0,     0,     0,     0,
-       0,     5,     6,     7,     0,     9,     0,     0,     0,    10,
-      11,    61,   242,    63,    12,     0,    13,    14,    15,    16,
-      17,    18,    19,     0,     0,     0,   262,     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,     0,
-      43,    44,    45,     0,    46,    47,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   215,     0,     0,   110,    50,     0,
-      51,    52,     0,     0,     0,    54,    55,    56,    57,    58,
-      59,    60,     0,     0,     0,     0,     0,     0,     0,     0,
-       5,     6,     7,     8,     9,     0,     0,     0,    10,    11,
-      61,    62,    63,    12,     0,    13,    14,    15,    16,    17,
-      18,    19,     0,   224,     0,   225,     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,     0,    43,
-      44,    45,     0,    46,    47,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    48,     0,     0,    49,    50,     0,    51,
-      52,     0,    53,     0,    54,    55,    56,    57,    58,    59,
-      60,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    61,
-      62,    63,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   403,   120,   121,   122,   123,   124,   125,   126,
-     127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
-     137,   138,   139,   140,   141,   142,   143,     0,     0,     0,
-     144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
-       0,     0,     0,     0,     0,   154,   155,   156,   157,   158,
-     159,   160,   161,   162,    37,    38,   163,    40,     0,     0,
-       0,     0,     0,     0,     0,     0,   164,   165,   166,   167,
-     168,   169,   170,   171,   172,     0,     0,   173,   174,     0,
-       0,   175,   176,   177,   178,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   179,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   180,   181,   182,   183,   184,   185,   186,   187,
-     188,   189,     0,   190,   191,  -517,  -517,  -517,     0,  -517,
-       0,   192,   193,  -517,  -517,     0,     0,     0,  -517,     0,
-    -517,  -517,  -517,  -517,  -517,  -517,  -517,     0,  -517,     0,
-       0,     0,  -517,  -517,  -517,  -517,  -517,  -517,  -517,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,  -517,     0,
-       0,  -517,  -517,  -517,  -517,  -517,  -517,  -517,  -517,  -517,
-    -517,  -517,  -517,     0,  -517,  -517,  -517,     0,  -517,  -517,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,  -517,     0,
-       0,  -517,  -517,     0,  -517,  -517,     0,  -517,  -517,  -517,
-    -517,  -517,  -517,  -517,  -517,  -517,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,  -517,  -517,  -517,     0,  -517,  -518,
-    -518,  -518,     0,  -518,  -517,     0,     0,  -518,  -518,     0,
-       0,     0,  -518,     0,  -518,  -518,  -518,  -518,  -518,  -518,
-    -518,     0,  -518,     0,     0,     0,  -518,  -518,  -518,  -518,
-    -518,  -518,  -518,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,  -518,     0,     0,  -518,  -518,  -518,  -518,  -518,
-    -518,  -518,  -518,  -518,  -518,  -518,  -518,     0,  -518,  -518,
-    -518,     0,  -518,  -518,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,  -518,     0,     0,  -518,  -518,     0,  -518,  -518,
-       0,  -518,  -518,  -518,  -518,  -518,  -518,  -518,  -518,  -518,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,  -518,  -518,
-    -518,     0,  -518,  -520,  -520,  -520,     0,  -520,  -518,     0,
-       0,  -520,  -520,     0,     0,     0,  -520,     0,  -520,  -520,
-    -520,  -520,  -520,  -520,  -520,     0,     0,     0,     0,     0,
-    -520,  -520,  -520,  -520,  -520,  -520,  -520,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,  -520,     0,     0,  -520,
-    -520,  -520,  -520,  -520,  -520,  -520,  -520,  -520,  -520,  -520,
-    -520,     0,  -520,  -520,  -520,     0,  -520,  -520,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,  -520,   735,     0,  -520,
-    -520,     0,  -520,  -520,     0,  -520,  -520,  -520,  -520,  -520,
-    -520,  -520,  -520,  -520,     0,     0,     0,     0,     0,   -92,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,  -520,  -520,  -520,  -521,  -521,  -521,     0,  -521,
-       0,     0,  -520,  -521,  -521,     0,     0,     0,  -521,     0,
-    -521,  -521,  -521,  -521,  -521,  -521,  -521,     0,     0,     0,
-       0,     0,  -521,  -521,  -521,  -521,  -521,  -521,  -521,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,  -521,     0,
-       0,  -521,  -521,  -521,  -521,  -521,  -521,  -521,  -521,  -521,
-    -521,  -521,  -521,     0,  -521,  -521,  -521,     0,  -521,  -521,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,  -521,   695,
-       0,  -521,  -521,     0,  -521,  -521,     0,  -521,  -521,  -521,
-    -521,  -521,  -521,  -521,  -521,  -521,     0,     0,     0,     0,
-       0,   -94,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,  -521,  -521,  -521,  -522,  -522,  -522,
-       0,  -522,     0,     0,  -521,  -522,  -522,     0,     0,     0,
-    -522,     0,  -522,  -522,  -522,  -522,  -522,  -522,  -522,     0,
-       0,     0,     0,     0,  -522,  -522,  -522,  -522,  -522,  -522,
-    -522,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-    -522,     0,     0,  -522,  -522,  -522,  -522,  -522,  -522,  -522,
-    -522,  -522,  -522,  -522,  -522,     0,  -522,  -522,  -522,     0,
-    -522,  -522,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-    -522,     0,     0,  -522,  -522,     0,  -522,  -522,     0,  -522,
-    -522,  -522,  -522,  -522,  -522,  -522,  -522,  -522,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,  -522,  -522,  -522,  -523,
-    -523,  -523,     0,  -523,     0,     0,  -522,  -523,  -523,     0,
-       0,     0,  -523,     0,  -523,  -523,  -523,  -523,  -523,  -523,
-    -523,     0,     0,     0,     0,     0,  -523,  -523,  -523,  -523,
-    -523,  -523,  -523,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,  -523,     0,     0,  -523,  -523,  -523,  -523,  -523,
-    -523,  -523,  -523,  -523,  -523,  -523,  -523,     0,  -523,  -523,
-    -523,     0,  -523,  -523,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,  -523,     0,     0,  -523,  -523,     0,  -523,  -523,
-       0,  -523,  -523,  -523,  -523,  -523,  -523,  -523,  -523,  -523,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,  -523,  -523,
-    -523,     0,     0,     0,     0,     0,     0,     0,  -523,   120,
-     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
-     131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
-     141,   142,   143,     0,     0,     0,   144,   145,   146,   199,
-     200,   201,   202,   151,   152,   153,     0,     0,     0,     0,
-       0,   154,   155,   156,   157,   203,   204,   205,   206,   162,
-     291,   292,   207,   293,     0,     0,     0,     0,     0,     0,
-       0,     0,   164,   165,   166,   167,   168,   169,   170,   171,
-     172,     0,     0,   173,   174,     0,     0,   175,   176,   177,
-     178,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   179,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   180,   181,
-     182,   183,   184,   185,   186,   187,   188,   189,     0,   190,
-     191,     0,     0,     0,     0,     0,     0,   192,   120,   121,
-     122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
-     132,   133,   134,   135,   136,   137,   138,   139,   140,   141,
-     142,   143,     0,     0,     0,   144,   145,   146,   199,   200,
-     201,   202,   151,   152,   153,     0,     0,     0,     0,     0,
-     154,   155,   156,   157,   203,   204,   205,   206,   162,   260,
-       0,   207,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   164,   165,   166,   167,   168,   169,   170,   171,   172,
-       0,     0,   173,   174,     0,     0,   175,   176,   177,   178,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     179,     0,     0,    55,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   180,   181,   182,
-     183,   184,   185,   186,   187,   188,   189,     0,   190,   191,
-       0,     0,     0,     0,     0,     0,   192,   120,   121,   122,
-     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
-     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
-     143,     0,     0,     0,   144,   145,   146,   199,   200,   201,
-     202,   151,   152,   153,     0,     0,     0,     0,     0,   154,
-     155,   156,   157,   203,   204,   205,   206,   162,     0,     0,
-     207,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     164,   165,   166,   167,   168,   169,   170,   171,   172,     0,
-       0,   173,   174,     0,     0,   175,   176,   177,   178,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   179,
-       0,     0,    55,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   180,   181,   182,   183,
-     184,   185,   186,   187,   188,   189,     0,   190,   191,     0,
-       0,     0,     0,     0,     0,   192,   120,   121,   122,   123,
-     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
-     134,   135,   136,   137,   138,   139,   140,   141,   142,   143,
-       0,     0,     0,   144,   145,   146,   199,   200,   201,   202,
-     151,   152,   153,     0,     0,     0,     0,     0,   154,   155,
-     156,   157,   203,   204,   205,   206,   162,     0,     0,   207,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   164,
-     165,   166,   167,   168,   169,   170,   171,   172,     0,     0,
-     173,   174,     0,     0,   175,   176,   177,   178,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   179,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   180,   181,   182,   183,   184,
-     185,   186,   187,   188,   189,     0,   190,   191,     5,     6,
-       7,     0,     9,     0,   192,     0,    10,    11,     0,     0,
-       0,    12,     0,    13,    14,    15,   100,   101,    18,    19,
-       0,     0,     0,     0,     0,   102,   103,   104,    23,    24,
-      25,    26,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   105,     0,     0,    32,    33,    34,    35,    36,    37,
-      38,    39,    40,     0,    41,    42,     0,    43,    44,    45,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   283,     0,     0,   110,    50,     0,    51,    52,     0,
-       0,     0,    54,    55,    56,    57,    58,    59,    60,     0,
-       0,     0,     0,     5,     6,     7,     0,     9,     0,     0,
-       0,    10,    11,     0,     0,     0,    12,   111,    13,    14,
-      15,   100,   101,    18,    19,   284,     0,     0,     0,     0,
-     102,   103,   104,    23,    24,    25,    26,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   105,     0,     0,    32,
-      33,    34,    35,    36,    37,    38,    39,    40,     0,    41,
-      42,     0,    43,    44,    45,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   283,     0,     0,   110,
-      50,     0,    51,    52,     0,     0,     0,    54,    55,    56,
-      57,    58,    59,    60,     0,     0,     0,     0,     5,     6,
-       7,     8,     9,     0,     0,     0,    10,    11,     0,     0,
-       0,    12,   111,    13,    14,    15,    16,    17,    18,    19,
-     516,     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,     0,    43,    44,    45,
-       0,    46,    47,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    48,     0,     0,    49,    50,     0,    51,    52,     0,
-      53,     0,    54,    55,    56,    57,    58,    59,    60,     0,
-       0,     0,     0,     0,     0,     0,     0,     5,     6,     7,
-       0,     9,     0,     0,     0,    10,    11,    61,    62,    63,
-      12,     0,    13,    14,    15,   100,   101,    18,    19,     0,
-       0,     0,     0,     0,   102,    21,    22,    23,    24,    25,
-      26,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      29,     0,     0,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,   239,    41,    42,     0,    43,    44,    45,     0,
-      46,    47,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     215,     0,     0,   110,    50,     0,    51,    52,     0,   240,
-     241,    54,    55,    56,    57,    58,    59,    60,     0,     0,
-       0,     0,     0,     0,     0,     0,     5,     6,     7,     0,
-       9,     0,     0,     0,    10,    11,    61,   242,    63,    12,
-       0,    13,    14,    15,   100,   101,    18,    19,     0,     0,
-       0,     0,     0,   102,    21,    22,    23,    24,    25,    26,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    29,
-       0,     0,    32,    33,    34,    35,    36,    37,    38,    39,
-      40,   239,    41,    42,     0,    43,    44,    45,     0,    46,
-      47,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   215,
-       0,     0,   110,   423,     0,    51,    52,     0,   240,   241,
-      54,    55,    56,    57,    58,    59,    60,     0,     0,     0,
-       0,     0,     0,     0,     0,     5,     6,     7,     0,     9,
-       0,     0,     0,    10,    11,    61,   242,    63,    12,     0,
-      13,    14,    15,   100,   101,    18,    19,     0,     0,     0,
-       0,     0,   102,   103,   104,    23,    24,    25,    26,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    29,     0,
-       0,    32,    33,    34,    35,    36,    37,    38,    39,    40,
-     239,    41,    42,     0,    43,    44,    45,     0,    46,    47,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   215,     0,
-       0,   110,    50,     0,    51,    52,     0,   619,   241,    54,
-      55,    56,    57,    58,    59,    60,     0,     0,     0,     0,
-       0,     0,     0,     0,     5,     6,     7,     0,     9,     0,
-       0,     0,    10,    11,    61,   242,    63,    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,   239,
-      41,    42,     0,    43,    44,    45,     0,    46,    47,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   215,     0,     0,
-     110,    50,     0,    51,    52,     0,     0,   241,    54,    55,
-      56,    57,    58,    59,    60,     0,     0,     0,     0,     0,
-       0,     0,     0,     5,     6,     7,     0,     9,     0,     0,
-       0,    10,    11,    61,    62,    63,    12,     0,    13,    14,
-      15,   100,   101,    18,    19,     0,     0,     0,     0,     0,
-     102,   103,   104,    23,    24,    25,    26,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    29,     0,     0,    32,
-      33,    34,    35,    36,    37,    38,    39,    40,   239,    41,
-      42,     0,    43,    44,    45,     0,    46,    47,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   215,     0,     0,   110,
-      50,     0,    51,    52,     0,   240,   241,    54,    55,    56,
-      57,    58,    59,    60,     0,     0,     0,     0,     0,     0,
-       0,     0,     5,     6,     7,     0,     9,     0,     0,     0,
-      10,    11,    61,   242,    63,    12,     0,    13,    14,    15,
-     100,   101,    18,    19,     0,     0,     0,     0,     0,   102,
-     103,   104,    23,    24,    25,    26,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    29,     0,     0,    32,    33,
-      34,    35,    36,    37,    38,    39,    40,   239,    41,    42,
-       0,    43,    44,    45,     0,    46,    47,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   215,     0,     0,   110,    50,
-       0,    51,    52,     0,   240,     0,    54,    55,    56,    57,
-      58,    59,    60,     0,     0,     0,     0,     0,     0,     0,
-       0,     5,     6,     7,     0,     9,     0,     0,     0,    10,
-      11,    61,   242,    63,    12,     0,    13,    14,    15,   100,
-     101,    18,    19,     0,     0,     0,     0,     0,   102,   103,
-     104,    23,    24,    25,    26,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    29,     0,     0,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,   239,    41,    42,     0,
-      43,    44,    45,     0,    46,    47,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   215,     0,     0,   110,    50,     0,
-      51,    52,     0,     0,   241,    54,    55,    56,    57,    58,
-      59,    60,     0,     0,     0,     0,     0,     0,     0,     0,
-       5,     6,     7,     0,     9,     0,     0,     0,    10,    11,
-      61,   242,    63,    12,     0,    13,    14,    15,   100,   101,
-      18,    19,     0,     0,     0,     0,     0,   102,   103,   104,
-      23,    24,    25,    26,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    29,     0,     0,    32,    33,    34,    35,
-      36,    37,    38,    39,    40,   239,    41,    42,     0,    43,
-      44,    45,     0,    46,    47,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   215,     0,     0,   110,    50,     0,    51,
-      52,     0,   619,     0,    54,    55,    56,    57,    58,    59,
-      60,     0,     0,     0,     0,     0,     0,     0,     0,     5,
-       6,     7,     0,     9,     0,     0,     0,    10,    11,    61,
-     242,    63,    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,     0,    43,    44,
-      45,     0,    46,    47,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   215,     0,     0,   110,    50,     0,    51,    52,
-       0,     0,     0,    54,    55,    56,    57,    58,    59,    60,
-       0,     0,     0,     0,     0,     0,     0,     0,     5,     6,
-       7,     0,     9,     0,     0,     0,    10,    11,    61,    62,
-      63,    12,     0,    13,    14,    15,   100,   101,    18,    19,
-       0,     0,     0,     0,     0,   102,   103,   104,    23,    24,
-      25,    26,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    29,     0,     0,    32,    33,    34,    35,    36,    37,
-      38,    39,    40,   239,    41,    42,     0,    43,    44,    45,
-       0,    46,    47,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   215,     0,     0,   110,    50,     0,    51,    52,     0,
-       0,     0,    54,    55,    56,    57,    58,    59,    60,     0,
-       0,     0,     0,     0,     0,     0,     0,     5,     6,     7,
-       0,     9,     0,     0,     0,    10,    11,    61,   242,    63,
-      12,     0,    13,    14,    15,    16,    17,    18,    19,     0,
-       0,     0,     0,     0,    20,    21,    22,    23,    24,    25,
-      26,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      29,     0,     0,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,     0,    41,    42,     0,    43,    44,    45,     0,
-      46,    47,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     215,     0,     0,   110,    50,     0,    51,    52,     0,   510,
-       0,    54,    55,    56,    57,    58,    59,    60,     0,     0,
-       0,     0,     0,     0,     0,     0,     5,     6,     7,     0,
-       9,     0,     0,     0,    10,    11,    61,   242,    63,    12,
-       0,    13,    14,    15,   100,   101,    18,    19,     0,     0,
-       0,     0,     0,   102,   103,   104,    23,    24,    25,    26,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    29,
-       0,     0,    32,    33,    34,    35,    36,    37,    38,    39,
-      40,     0,    41,    42,     0,    43,    44,    45,     0,    46,
-      47,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   215,
-       0,     0,   110,    50,     0,    51,    52,     0,   240,     0,
-      54,    55,    56,    57,    58,    59,    60,     0,     0,     0,
-       0,     0,     0,     0,     0,     5,     6,     7,     0,     9,
-       0,     0,     0,    10,    11,    61,   242,    63,    12,     0,
-      13,    14,    15,   100,   101,    18,    19,     0,     0,     0,
-       0,     0,   102,   103,   104,    23,    24,    25,    26,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    29,     0,
-       0,    32,    33,    34,    35,    36,    37,    38,    39,    40,
-       0,    41,    42,     0,    43,    44,    45,     0,    46,    47,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   215,     0,
-       0,   110,    50,     0,    51,    52,     0,   510,     0,    54,
-      55,    56,    57,    58,    59,    60,     0,     0,     0,     0,
-       0,     0,     0,     0,     5,     6,     7,     0,     9,     0,
-       0,     0,    10,    11,    61,   242,    63,    12,     0,    13,
-      14,    15,   100,   101,    18,    19,     0,     0,     0,     0,
-       0,   102,   103,   104,    23,    24,    25,    26,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    29,     0,     0,
-      32,    33,    34,    35,    36,    37,    38,    39,    40,     0,
-      41,    42,     0,    43,    44,    45,     0,    46,    47,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   215,     0,     0,
-     110,    50,     0,    51,    52,     0,   792,     0,    54,    55,
-      56,    57,    58,    59,    60,     0,     0,     0,     0,     0,
-       0,     0,     0,     5,     6,     7,     0,     9,     0,     0,
-       0,    10,    11,    61,   242,    63,    12,     0,    13,    14,
-      15,   100,   101,    18,    19,     0,     0,     0,     0,     0,
-     102,   103,   104,    23,    24,    25,    26,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    29,     0,     0,    32,
-      33,    34,    35,    36,    37,    38,    39,    40,     0,    41,
-      42,     0,    43,    44,    45,     0,    46,    47,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   215,     0,     0,   110,
-      50,     0,    51,    52,     0,   619,     0,    54,    55,    56,
-      57,    58,    59,    60,     0,     0,     0,     0,     0,     0,
-       0,     0,     5,     6,     7,     0,     9,     0,     0,     0,
-      10,    11,    61,   242,    63,    12,     0,    13,    14,    15,
-     100,   101,    18,    19,     0,     0,     0,     0,     0,   102,
-     103,   104,    23,    24,    25,    26,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    29,     0,     0,    32,    33,
-      34,    35,    36,    37,    38,    39,    40,     0,    41,    42,
-       0,    43,    44,    45,     0,    46,    47,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   215,     0,     0,   110,    50,
-       0,    51,    52,     0,     0,     0,    54,    55,    56,    57,
-      58,    59,    60,     0,     0,     0,     0,     0,     0,     0,
-       0,     5,     6,     7,     0,     9,     0,     0,     0,    10,
-      11,    61,   242,    63,    12,     0,    13,    14,    15,    16,
-      17,    18,    19,     0,     0,     0,     0,     0,    20,    21,
-      22,    23,    24,    25,    26,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    29,     0,     0,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,     0,    41,    42,     0,
-      43,    44,    45,     0,    46,    47,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   215,     0,     0,   110,    50,     0,
-      51,    52,     0,     0,     0,    54,    55,    56,    57,    58,
-      59,    60,     0,     0,     0,     0,     0,     0,     0,     0,
-       5,     6,     7,     0,     9,     0,     0,     0,    10,    11,
-      61,   242,    63,    12,     0,    13,    14,    15,   100,   101,
-      18,    19,     0,     0,     0,     0,     0,   102,   103,   104,
-      23,    24,    25,    26,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   105,     0,     0,    32,    33,    34,   106,
-      36,    37,    38,   107,    40,     0,    41,    42,     0,    43,
-      44,    45,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     108,     0,     0,   109,     0,     0,   110,    50,     0,    51,
-      52,     0,     0,     0,    54,    55,    56,    57,    58,    59,
-      60,     0,     0,     0,     0,     5,     6,     7,     0,     9,
-       0,     0,     0,    10,    11,     0,     0,     0,    12,   111,
-      13,    14,    15,   100,   101,    18,    19,     0,     0,     0,
-       0,     0,   102,   103,   104,    23,    24,    25,    26,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   105,     0,
-       0,    32,    33,    34,    35,    36,    37,    38,    39,    40,
-       0,    41,    42,     0,    43,    44,    45,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   232,     0,
-       0,    49,    50,     0,    51,    52,     0,    53,     0,    54,
-      55,    56,    57,    58,    59,    60,     0,     0,     0,     0,
-       5,     6,     7,     0,     9,     0,     0,     0,    10,    11,
-       0,     0,     0,    12,   111,    13,    14,    15,   100,   101,
-      18,    19,     0,     0,     0,     0,     0,   102,   103,   104,
-      23,    24,    25,    26,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   105,     0,     0,    32,    33,    34,    35,
-      36,    37,    38,    39,    40,     0,    41,    42,     0,    43,
-      44,    45,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   283,     0,     0,   322,    50,     0,    51,
-      52,     0,   323,     0,    54,    55,    56,    57,    58,    59,
-      60,     0,     0,     0,     0,     5,     6,     7,     0,     9,
-       0,     0,     0,    10,    11,     0,     0,     0,    12,   111,
-      13,    14,    15,   100,   101,    18,    19,     0,     0,     0,
-       0,     0,   102,   103,   104,    23,    24,    25,    26,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   105,     0,
-       0,    32,    33,    34,   106,    36,    37,    38,   107,    40,
-       0,    41,    42,     0,    43,    44,    45,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   109,     0,
-       0,   110,    50,     0,    51,    52,     0,     0,     0,    54,
-      55,    56,    57,    58,    59,    60,     0,     0,     0,     0,
-       5,     6,     7,     0,     9,     0,     0,     0,    10,    11,
-       0,     0,     0,    12,   111,    13,    14,    15,   100,   101,
-      18,    19,     0,     0,     0,     0,     0,   102,   103,   104,
-      23,    24,    25,    26,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   105,     0,     0,    32,    33,    34,    35,
-      36,    37,    38,    39,    40,     0,    41,    42,     0,    43,
-      44,    45,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   283,     0,     0,   322,    50,     0,    51,
-      52,     0,     0,     0,    54,    55,    56,    57,    58,    59,
-      60,     0,     0,     0,     0,     5,     6,     7,     0,     9,
-       0,     0,     0,    10,    11,     0,     0,     0,    12,   111,
-      13,    14,    15,   100,   101,    18,    19,     0,     0,     0,
-       0,     0,   102,   103,   104,    23,    24,    25,    26,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   105,     0,
-       0,    32,    33,    34,    35,    36,    37,    38,    39,    40,
-       0,    41,    42,     0,    43,    44,    45,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   874,     0,
-       0,   110,    50,     0,    51,    52,     0,     0,     0,    54,
-      55,    56,    57,    58,    59,    60,     0,     0,     0,     0,
-       0,   549,   550,     0,     0,   551,     0,     0,     0,     0,
-       0,     0,     0,     0,   111,   164,   165,   166,   167,   168,
-     169,   170,   171,   172,     0,     0,   173,   174,     0,     0,
-     175,   176,   177,   178,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   179,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   180,   181,   182,   183,   184,   185,   186,   187,   188,
-     189,     0,   190,   191,   557,   558,     0,     0,   559,     0,
-     192,   256,     0,     0,     0,     0,     0,     0,   164,   165,
-     166,   167,   168,   169,   170,   171,   172,     0,     0,   173,
-     174,     0,     0,   175,   176,   177,   178,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   179,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   180,   181,   182,   183,   184,   185,
-     186,   187,   188,   189,     0,   190,   191,   579,   550,     0,
-       0,   580,     0,   192,   256,     0,     0,     0,     0,     0,
-       0,   164,   165,   166,   167,   168,   169,   170,   171,   172,
-       0,     0,   173,   174,     0,     0,   175,   176,   177,   178,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     179,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   180,   181,   182,
-     183,   184,   185,   186,   187,   188,   189,     0,   190,   191,
-     563,   558,     0,     0,   564,     0,   192,   256,     0,     0,
-       0,     0,     0,     0,   164,   165,   166,   167,   168,   169,
-     170,   171,   172,     0,     0,   173,   174,     0,     0,   175,
-     176,   177,   178,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   179,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
-       0,   190,   191,   599,   550,     0,     0,   600,     0,   192,
-     256,     0,     0,     0,     0,     0,     0,   164,   165,   166,
-     167,   168,   169,   170,   171,   172,     0,     0,   173,   174,
-       0,     0,   175,   176,   177,   178,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   179,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   180,   181,   182,   183,   184,   185,   186,
-     187,   188,   189,     0,   190,   191,   602,   558,     0,     0,
-     603,     0,   192,   256,     0,     0,     0,     0,     0,     0,
-     164,   165,   166,   167,   168,   169,   170,   171,   172,     0,
-       0,   173,   174,     0,     0,   175,   176,   177,   178,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   179,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   180,   181,   182,   183,
-     184,   185,   186,   187,   188,   189,     0,   190,   191,   612,
-     550,     0,     0,   613,     0,   192,   256,     0,     0,     0,
-       0,     0,     0,   164,   165,   166,   167,   168,   169,   170,
-     171,   172,     0,     0,   173,   174,     0,     0,   175,   176,
-     177,   178,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   179,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   180,
-     181,   182,   183,   184,   185,   186,   187,   188,   189,     0,
-     190,   191,   615,   558,     0,     0,   616,     0,   192,   256,
-       0,     0,     0,     0,     0,     0,   164,   165,   166,   167,
-     168,   169,   170,   171,   172,     0,     0,   173,   174,     0,
-       0,   175,   176,   177,   178,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   179,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   180,   181,   182,   183,   184,   185,   186,   187,
-     188,   189,     0,   190,   191,   644,   550,     0,     0,   645,
-       0,   192,   256,     0,     0,     0,     0,     0,     0,   164,
-     165,   166,   167,   168,   169,   170,   171,   172,     0,     0,
-     173,   174,     0,     0,   175,   176,   177,   178,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   179,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   180,   181,   182,   183,   184,
-     185,   186,   187,   188,   189,     0,   190,   191,   647,   558,
-       0,     0,   648,     0,   192,   256,     0,     0,     0,     0,
-       0,     0,   164,   165,   166,   167,   168,   169,   170,   171,
-     172,     0,     0,   173,   174,     0,     0,   175,   176,   177,
-     178,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   179,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   180,   181,
-     182,   183,   184,   185,   186,   187,   188,   189,     0,   190,
-     191,   925,   550,     0,     0,   926,     0,   192,   256,     0,
-       0,     0,     0,     0,     0,   164,   165,   166,   167,   168,
-     169,   170,   171,   172,     0,     0,   173,   174,     0,     0,
-     175,   176,   177,   178,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   179,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   180,   181,   182,   183,   184,   185,   186,   187,   188,
-     189,     0,   190,   191,   928,   558,     0,     0,   929,     0,
-     192,   256,     0,     0,     0,     0,     0,     0,   164,   165,
-     166,   167,   168,   169,   170,   171,   172,     0,     0,   173,
-     174,     0,     0,   175,   176,   177,   178,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   179,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   180,   181,   182,   183,   184,   185,
-     186,   187,   188,   189,     0,   190,   191,   563,   558,     0,
-       0,   564,     0,   192,   256,     0,     0,     0,     0,     0,
-       0,   164,   165,   166,   167,   168,   169,   170,   171,   172,
-       0,     0,   173,   174,     0,     0,   175,   176,   177,   178,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     179,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   180,   181,   182,
-     183,   184,   185,   186,   187,   188,   189,     0,   190,   191,
-       0,     0,     0,     0,     0,     0,   192,   326,   327,   328,
-     329,   330,   331,   332,   333,   334,   335,   336,   337,   338,
-       0,     0,   339,   340,     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,   341,
-       0,   342,   343,   344,   345,   346,   347,   348,   349,   350,
-     351,     0,   326,   327,   328,   329,   330,   331,   332,   333,
-     334,   335,   336,   337,   338,     0,   262,   339,   340,     0,
-       0,     0,  -230,   326,   327,   328,   329,   330,   331,   332,
-       0,     0,   335,   336,     0,     0,     0,     0,   339,   340,
-       0,     0,     0,     0,   341,     0,   342,   343,   344,   345,
-     346,   347,   348,   349,   350,   351,     0,     0,     0,     0,
-       0,     0,     0,     0,  -230,     0,     0,   342,   343,   344,
-     345,   346,   347,   348,   349,   350,   351
-};
-
-static const yytype_int16 yycheck[] =
-{
-       2,    74,     4,     5,     6,   380,    29,     8,    10,    11,
-      12,     7,     8,    15,    16,    17,     5,     6,    20,    51,
-     223,     7,   405,   249,    28,    27,    15,    28,   400,     4,
-       8,    62,    28,    53,    49,   290,   277,    16,    17,    22,
-     281,    20,    11,    12,   455,    22,   666,    49,    50,   109,
-      28,    53,   663,    51,    52,   594,   325,   290,   415,    55,
-      62,   418,   353,   583,    53,   604,   423,    16,    17,    55,
-     669,    20,    74,    65,   352,   297,   354,   355,   356,   301,
-     763,   601,   105,   659,   761,    74,     1,   378,    25,   567,
-     568,    12,    25,   666,   614,    26,   669,    25,   270,    13,
-      29,   379,     0,    13,   395,   516,   108,   683,   110,    13,
-     683,    87,    25,    61,    97,    76,   394,   408,   396,    13,
-      97,    85,    13,    13,    26,    52,   646,   104,   418,    56,
-     137,   409,    85,   109,    59,    60,   130,    25,    61,   126,
-      27,   118,    61,   137,    65,    85,    65,    25,    56,   382,
-     322,    25,    25,   114,    25,    25,   104,   105,   448,     2,
-     438,     4,    88,   136,   841,   129,   457,    10,    11,    12,
-      37,    38,   109,    16,    17,   128,   129,    20,   107,   132,
-     458,   109,   136,   106,    27,   104,   105,   669,   136,   129,
-     672,    28,   113,   130,   130,   126,   133,   130,   113,   132,
-     137,   683,   130,   578,   130,   133,    49,    50,   891,   137,
-     786,   284,   214,   588,   109,   470,   893,   130,   132,    62,
-     135,   135,   137,   137,   126,   135,   130,   137,   230,   231,
-     132,   135,   852,   137,   226,   713,   847,   470,   915,    99,
-     860,   135,   130,   137,   135,   135,   137,   137,   135,   848,
-     137,   253,   130,   255,   256,   270,   130,   130,   132,   130,
-     130,   230,   231,   265,    87,   108,   130,   110,   270,    88,
-     137,   109,   494,   137,   253,   848,   255,   256,    85,    87,
-     691,    85,   284,    61,   109,    68,   109,   860,   320,   320,
-     109,   830,   130,   325,   325,   284,    15,    68,    17,    87,
-     465,   109,   132,   323,   253,   226,   255,   322,   310,   311,
-     312,   313,   314,   315,   316,   317,   132,   377,   320,   130,
-     322,   323,   129,   325,   593,   129,   104,   105,   106,    85,
-     361,   362,   587,    87,   323,   310,   119,   120,   121,    85,
-     315,    61,   311,   312,   313,   314,   117,   118,   119,   120,
-     121,   353,    54,    87,   587,   109,   352,    56,   697,   361,
-     362,    63,    64,   746,    85,   704,   848,   109,   850,   401,
-      85,   214,   854,   129,   353,   109,   378,   354,   380,   381,
-     862,   377,   455,   129,   104,   105,   106,   230,   231,   391,
-      26,    87,   749,   395,    85,   135,   622,   399,   394,   378,
-     641,    61,   379,   606,    26,   631,   408,   927,   129,    17,
-     253,   407,   255,   256,   129,    85,   395,   415,    85,   396,
-      88,   423,   265,    37,    38,   423,    26,   270,   432,   408,
-      56,   432,   409,   435,    87,   917,   432,   812,   129,   921,
-      26,   437,    25,   516,   104,   105,   106,   445,   130,    85,
-     683,    85,   373,   455,   432,   457,   109,    61,   830,   129,
-     456,   438,   129,    85,   130,    85,   455,   310,   311,   312,
-     313,   314,   315,   316,   317,    59,    60,   320,   457,   322,
-      85,   458,   325,   404,   405,    85,    14,    15,   653,   654,
-     126,    87,   128,   129,   128,   129,   132,   132,   873,    85,
-     104,   105,   106,   135,   126,   137,   128,   129,   128,   129,
-     353,    85,    68,   109,   516,   538,   126,   272,   361,   362,
-      85,   565,   566,   128,   129,   134,   126,   516,   128,   129,
-      85,   888,   132,   556,   130,   378,   133,   380,   381,   109,
-     126,    56,   128,   129,    57,    58,   132,   127,   391,   130,
-      68,   130,   395,   106,   128,   129,   399,   106,    68,    94,
-     583,   593,    10,   128,   129,   408,     8,    13,    85,   642,
-      10,   554,   133,   128,   129,   577,   578,   554,   601,   562,
-     423,    52,   565,   566,   817,   562,   588,   591,   565,   566,
-     591,   614,   435,    85,   590,   591,   761,    52,   763,    54,
-      55,    56,    57,    58,   590,   582,    85,   584,   577,   835,
-     836,   128,   129,   591,   457,   617,   819,   908,   691,   127,
-      52,    87,   825,   646,    52,   130,    54,    55,    56,    57,
-      58,   909,   634,   130,   135,    85,   128,   129,    87,   478,
-     642,   480,   130,   109,   130,    52,   130,    85,   617,   128,
-     129,    52,    87,   642,   575,   136,   130,   130,   660,   661,
-     109,    89,   130,   694,   130,   420,    10,    95,   589,   700,
-     701,   426,    15,   675,   109,   130,   841,   842,   128,   129,
-      10,   130,   684,   127,    52,   440,    88,   913,   443,   691,
-     128,   129,   694,   130,   130,   130,    87,   111,   700,   701,
-      87,    52,   691,    54,    55,    56,    57,    58,   710,   711,
-      52,   134,    54,    55,    56,    57,    58,   749,   109,    10,
-     130,    10,   109,    88,     9,   130,   891,   729,   893,    10,
-     732,    10,    10,   127,   577,   578,   114,   130,   130,   130,
-     742,   743,   744,   130,   130,   588,   130,    89,   127,   130,
-     915,   749,   127,    95,   130,    10,   130,    16,    17,    10,
-     515,    20,    52,   732,    54,    55,    56,    57,   239,   240,
-     241,   802,    10,    10,   617,   130,   130,   114,    52,   130,
-      54,    55,    56,    57,    58,   130,    68,    46,    47,   127,
-      10,   634,    51,    52,   715,    56,    54,    55,   130,    57,
-     802,    83,    84,    62,    63,    63,    64,   130,   130,   811,
-     812,    10,    10,    15,     6,    89,   818,   660,   661,   911,
-     822,    95,    96,   847,   653,   746,   910,    81,    84,   818,
-       7,   586,   675,   817,   116,   117,   118,   119,   120,   121,
-     666,   684,   116,    65,    68,   119,    -1,    -1,    -1,   320,
-      -1,   694,    -1,    -1,   325,    -1,    -1,   700,   701,    83,
-      84,   135,    40,    41,    42,    43,    44,   710,   711,    -1,
-      -1,   873,    -1,    -1,   629,    -1,    -1,   879,    -1,   881,
-      -1,    -1,    -1,    -1,    -1,   887,   729,    -1,    -1,   732,
-     888,    -1,    -1,   117,   118,   119,   120,   121,    -1,   742,
-     743,   744,   657,    -1,   927,    -1,   908,    -1,    -1,    -1,
-      -1,   907,    -1,     2,    -1,     4,     5,     6,     7,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    15,    -1,    -1,   908,
-     401,    -1,   909,    -1,   773,   774,    -1,   776,    -1,   778,
-     779,    -1,    -1,   414,   415,    -1,    -1,   418,    -1,   788,
-     789,    -1,   423,    -1,    -1,    51,    52,    -1,    -1,   802,
-      49,    -1,    -1,    -1,    53,   720,    -1,    -1,   811,   812,
-      -1,    -1,    -1,    -1,   445,    -1,    -1,   448,    -1,   822,
-     239,   240,   241,   242,    -1,    74,    -1,    52,    -1,    54,
-      55,    56,    57,    58,   253,   750,   255,   256,   753,    -1,
-      -1,    -1,    10,    11,    12,   760,    -1,    -1,    -1,    52,
-     765,    54,    55,    56,    57,    58,    -1,    -1,    -1,    27,
-      -1,   110,    -1,    -1,    89,    -1,    -1,    -1,    -1,    -1,
-     873,    96,    -1,    -1,    -1,    -1,   879,    -1,   881,   510,
-      -1,    -1,    50,    -1,   887,    -1,    89,    -1,    -1,    -1,
-      -1,   116,    -1,    -1,    -1,    -1,    -1,   896,   897,   898,
-     899,   320,   901,   902,    -1,   908,   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,    -1,   353,    -1,   935,   936,    -1,    -1,
-     108,    -1,   361,   362,    -1,    -1,    -1,    52,    -1,    54,
-      55,    56,    57,    58,    -1,    -1,    -1,    -1,    -1,   378,
-      -1,    -1,   593,    -1,    52,   214,    54,    55,    56,    57,
-      58,    -1,    -1,    -1,   393,    -1,   395,    -1,   397,   398,
-      -1,    -1,   401,    -1,    89,    -1,    -1,    -1,   619,   408,
-      95,    96,   248,   249,    -1,   414,   415,    -1,    -1,   418,
-     256,    89,    -1,    -1,   423,    -1,    -1,    95,    96,    -1,
-      -1,   116,    -1,    -1,   119,   434,   265,    -1,    -1,   650,
-     439,   270,    -1,    -1,    -1,    -1,   445,   132,   116,   448,
-      -1,   119,    -1,    -1,    -1,   284,    -1,    -1,   457,    -1,
-      -1,    -1,    -1,    -1,   132,    -1,    -1,    -1,    -1,    -1,
-      52,    -1,    54,    55,    56,    57,    58,   688,    -1,    -1,
-      -1,   310,   230,   231,    -1,    -1,   315,    -1,    -1,    -1,
-      -1,    -1,    -1,   322,   323,    -1,    -1,    -1,    -1,    -1,
-     499,   500,    -1,    -1,    -1,    -1,     2,    89,     4,     5,
-       6,   510,    -1,    95,    96,    -1,    -1,   353,    -1,    15,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     741,    -1,    -1,    -1,   116,    -1,    -1,   119,    -1,    -1,
-      -1,    -1,   378,    52,    -1,    54,    55,    56,    57,    58,
-      -1,   380,   388,    49,    -1,    -1,    -1,    53,    -1,   395,
-      -1,    -1,   391,   311,   312,   313,   314,    -1,   316,   317,
-     399,    -1,   408,    -1,    -1,    -1,    -1,     2,    74,     4,
-      89,   792,    -1,    -1,    -1,    -1,    95,    96,    -1,    -1,
-      15,    -1,    -1,    -1,   593,    -1,    -1,    -1,     2,    -1,
-       4,    -1,    -1,    -1,    -1,    -1,   435,   116,    -1,    -1,
-     119,    -1,    -1,    -1,   110,     2,    -1,    -1,    -1,    68,
-     619,   457,    -1,    -1,    49,    -1,   455,    -1,    -1,    -1,
-      -1,    -1,    -1,   381,    83,    84,   472,    -1,    -1,    -1,
-     476,    -1,   478,    -1,   480,    49,    -1,    -1,    -1,    -1,
-      -1,   650,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    49,    -1,    -1,   114,   115,   116,   117,   118,
-     119,   120,   121,   509,    -1,   423,    -1,   888,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   110,    -1,   516,    -1,   688,
-      -1,    -1,    -1,   692,    -1,   694,   695,    -1,    -1,    -1,
-      -1,   700,   701,    -1,    -1,    -1,   110,    -1,    -1,    -1,
-      -1,    -1,    -1,   712,    -1,    -1,    -1,    -1,   214,    -1,
-      -1,    -1,    -1,   110,    -1,    -1,   562,    -1,    -1,   565,
-     566,   567,   568,    -1,    -1,    -1,   735,    -1,   737,   738,
-      -1,    -1,   741,    -1,    -1,    -1,    -1,    -1,   584,   578,
-     749,    -1,    -1,    -1,    -1,    -1,    -1,   593,   594,   588,
-     596,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   604,   265,
-      -1,    -1,    -1,    -1,   270,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   622,    -1,   284,   214,
-      -1,    -1,    -1,   792,    -1,   631,    -1,   796,    -1,    -1,
-      -1,    -1,    -1,   802,    -1,    -1,    -1,    -1,    -1,    -1,
-     214,    -1,    -1,   642,   310,    -1,    -1,    -1,    -1,   315,
-      -1,    -1,    -1,   659,    -1,    -1,   322,   323,   827,   577,
-      -1,   660,   661,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     265,    -1,    -1,    -1,    -1,   270,   675,   683,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   684,    -1,    -1,    -1,    -1,
-      -1,   265,   691,    -1,    -1,    -1,   270,    -1,    -1,   617,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   713,   265,    -1,
-      -1,   710,   711,   270,   380,   310,   634,    -1,    -1,   888,
-     315,   727,    -1,    -1,   730,   391,    -1,   322,    -1,    -1,
-     729,    -1,    -1,   399,    -1,    -1,   310,    -1,    -1,   908,
-      -1,   315,    -1,   742,   743,   744,    -1,    -1,   322,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   322,    -1,   773,   774,   435,
-     776,    -1,   778,   779,    -1,    -1,    -1,    -1,    -1,    -1,
-     786,    -1,   788,   789,    -1,   380,    -1,    -1,    -1,   455,
-      -1,    -1,    -1,    -1,    -1,    -1,   391,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   399,    -1,   380,    -1,    -1,    -1,
-      -1,    -1,   811,   812,   732,    -1,    -1,   391,    -1,   818,
-      -1,    -1,    -1,   822,   830,   399,    -1,    -1,    -1,   835,
-     836,    -1,    -1,    -1,   391,    -1,    -1,    -1,    -1,    -1,
-     435,    -1,   399,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     516,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   435,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   873,    -1,    -1,    -1,   435,    -1,
-     879,    -1,   881,    -1,    -1,    -1,    -1,    -1,   887,    -1,
-     896,   897,   898,   899,    -1,   901,   902,    -1,    -1,    -1,
-       0,    -1,   908,    -1,   910,   911,    -1,   913,     8,     9,
-      10,    -1,   578,    13,    14,    15,    -1,    17,    -1,    -1,
-      -1,    -1,   588,    -1,    -1,    -1,    -1,    27,    -1,   935,
-     936,    -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,
-      -1,    -1,    -1,    -1,    -1,    -1,   642,    -1,    -1,    -1,
-      -1,    -1,    -1,   578,    -1,    85,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   588,   660,   661,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   578,    -1,    -1,    -1,    -1,   675,
-     676,    -1,    -1,    -1,   588,    -1,    -1,    -1,   684,    -1,
-      -1,    -1,    44,    -1,    -1,   691,    -1,   127,    -1,   129,
-      -1,    -1,   132,   133,    -1,   135,    -1,   137,    -1,    -1,
-      -1,    -1,    -1,    -1,   710,   711,    68,    69,    70,    71,
-      72,    73,    74,    75,    76,    77,    78,    79,    80,    -1,
-      -1,    83,    84,   729,    -1,   660,   661,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   742,   743,   744,    -1,
-     675,    -1,    -1,    -1,    -1,    -1,   660,   661,   110,   684,
-     112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
-      -1,   675,    -1,   660,   661,    -1,    -1,    -1,   130,    -1,
-     684,    -1,    -1,    -1,    -1,   710,   711,    -1,   675,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   684,    -1,    -1,
-      -1,    -1,    -1,    -1,   729,    -1,   710,   711,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   811,   812,   742,   743,   744,
-      -1,    -1,   818,   710,   711,   729,   822,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   742,   743,
-     744,    -1,   729,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   742,   743,   744,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   873,    -1,    -1,
-      -1,    -1,    -1,   879,    -1,   881,   811,   812,    -1,    -1,
-      -1,   887,    -1,   818,    -1,    -1,    -1,   822,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   811,   812,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   822,    -1,
-      -1,    -1,    -1,    -1,   811,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   822,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   873,    -1,
-      -1,    -1,    -1,    -1,   879,    -1,   881,    -1,    -1,    -1,
-      -1,    -1,   887,    -1,    -1,    -1,    -1,    -1,    -1,   873,
-      -1,    -1,    -1,    -1,    -1,   879,    -1,   881,    -1,    -1,
-      -1,    -1,    -1,   887,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   879,    -1,   881,    -1,    -1,    -1,     0,     1,
-     887,     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,    -1,
-      62,    63,    64,    -1,    66,    67,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    86,    -1,    -1,    89,    90,    -1,
-      92,    93,    -1,    95,    -1,    97,    98,    99,   100,   101,
-     102,   103,     0,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       8,     9,    10,    -1,    -1,    13,    14,    15,    -1,    17,
-     122,   123,   124,    -1,    -1,    -1,    -1,    -1,    26,    27,
-      28,    -1,    -1,   135,    -1,   137,    -1,    -1,    -1,    37,
-      38,    -1,    40,    41,    42,    43,    44,    -1,    -1,    -1,
-      -1,    -1,    -1,    68,    69,    70,    71,    72,    73,    74,
-      75,    76,    77,    78,    79,    80,    -1,    -1,    83,    84,
-      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
-      78,    79,    80,    -1,    -1,    83,    84,    85,    -1,    -1,
-      88,    -1,    -1,    -1,    -1,   110,    94,   112,   113,   114,
-     115,   116,   117,   118,   119,   120,   121,    -1,    -1,    -1,
-      -1,    -1,   110,    -1,   112,   113,   114,   115,   116,   117,
-     118,   119,   120,   121,    -1,    -1,    -1,    -1,   126,   127,
-     128,   129,   130,     0,   132,   133,   134,   135,    -1,   137,
-      -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,    68,    69,    70,    71,    72,    73,
-      74,    75,    76,    77,    78,    79,    80,    -1,    -1,    83,
-      84,    68,    69,    70,    71,    72,    73,    74,    75,    76,
-      77,    78,    79,    80,    -1,    -1,    83,    84,    85,    -1,
-      -1,    88,    -1,    -1,    -1,    -1,    -1,    94,   112,   113,
-     114,   115,   116,   117,   118,   119,   120,   121,    -1,    -1,
-     107,    -1,    -1,   110,   111,   112,   113,   114,   115,   116,
-     117,   118,   119,   120,   121,    -1,    -1,    -1,    -1,    -1,
-     127,   128,   129,   130,     0,    -1,   133,   134,   135,    -1,
-     137,    -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,    68,    69,    70,    71,    72,
-      73,    74,    75,    -1,    77,    78,    -1,    -1,    -1,    -1,
-      83,    84,    68,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    -1,    -1,    83,    84,    85,
-      -1,    -1,    88,    -1,    -1,    -1,    -1,    -1,    94,   112,
-     113,   114,   115,   116,   117,   118,   119,   120,   121,    -1,
-      -1,    -1,    -1,    -1,   110,    -1,   112,   113,   114,   115,
-     116,   117,   118,   119,   120,   121,    -1,    -1,    -1,    -1,
-     126,   127,   128,   129,   130,     0,   132,   133,   134,   135,
-      -1,   137,    -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,    68,    69,    70,    71,
-      72,    73,    74,    -1,    -1,    77,    78,    -1,    -1,    -1,
-      -1,    83,    84,    68,    69,    70,    71,    72,    73,    74,
-      75,    76,    77,    78,    79,    80,    -1,    -1,    83,    84,
-      85,    -1,    -1,    88,    -1,    -1,    -1,    -1,    -1,    94,
-     112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
-      -1,    -1,    -1,    -1,    -1,   110,    -1,   112,   113,   114,
-     115,   116,   117,   118,   119,   120,   121,    -1,    -1,    -1,
-      -1,    -1,   127,   128,   129,   130,     0,   132,   133,   134,
-     135,    -1,   137,    -1,     8,     9,    10,    -1,    -1,    -1,
-      14,    15,    -1,    17,    -1,    -1,    -1,    -1,    44,    -1,
-      -1,    -1,    26,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    37,    38,    -1,    40,    41,    42,    43,
-      44,    -1,    68,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    -1,    -1,    83,    84,    -1,
-      -1,    -1,    -1,    -1,    68,    69,    70,    71,    72,    73,
-      74,    75,    76,    77,    78,    79,    80,    -1,    -1,    83,
-      84,    85,    -1,    87,   110,    -1,   112,   113,   114,   115,
-     116,   117,   118,   119,   120,   121,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   109,   110,    -1,   112,   113,
-     114,   115,   116,   117,   118,   119,   120,   121,    -1,    -1,
-      -1,    -1,   126,   127,   128,   129,   130,     0,    -1,   133,
-      -1,   135,    -1,   137,    -1,     8,     9,    10,    -1,    -1,
-      -1,    14,    15,    -1,    17,    -1,    -1,    -1,    -1,    44,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    37,    38,    -1,    40,    41,    42,
-      43,    44,    -1,    68,    69,    70,    71,    72,    73,    74,
-      75,    76,    77,    78,    79,    80,    -1,    -1,    83,    84,
-      -1,    -1,    -1,    -1,    -1,    68,    69,    70,    71,    72,
-      73,    74,    75,    76,    77,    78,    79,    80,    -1,    -1,
-      83,    84,    85,    -1,    87,   110,    -1,   112,   113,   114,
-     115,   116,   117,   118,   119,   120,   121,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   109,   110,    -1,   112,
-     113,   114,   115,   116,   117,   118,   119,   120,   121,    -1,
-      -1,    -1,    -1,    -1,   127,   128,   129,   130,    -1,    -1,
-     133,    -1,   135,     1,   137,     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,    -1,    62,    63,    64,    -1,    66,    67,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,
-      -1,    89,    90,    -1,    92,    93,    -1,    95,    -1,    97,
-      98,    99,   100,   101,   102,   103,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   122,   123,   124,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   135,     1,   137,
-       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,    -1,    62,
-      63,    64,    -1,    66,    67,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    86,    -1,    -1,    89,    90,    -1,    92,
-      93,    -1,    95,    -1,    97,    98,    99,   100,   101,   102,
-     103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   122,
-     123,   124,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   135,     1,   137,     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,    -1,    62,    63,    64,    -1,    66,    67,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,
-      -1,    89,    90,    -1,    92,    93,    -1,    95,    -1,    97,
-      98,    99,   100,   101,   102,   103,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   122,   123,   124,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   135,     1,   137,
-       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,    -1,    62,
-      63,    64,    -1,    66,    67,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    86,    -1,    -1,    89,    90,    -1,    92,
-      93,    -1,    95,    -1,    97,    98,    99,   100,   101,   102,
-     103,    -1,    -1,    -1,    -1,    -1,    -1,     1,    -1,     3,
-       4,     5,     6,     7,    -1,     9,    10,    11,    12,   122,
-     123,   124,    16,    -1,    18,    19,    20,    21,    22,    23,
-      24,    -1,   135,    -1,   137,    -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,    -1,    62,    63,
-      64,    -1,    66,    67,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    86,    -1,    -1,    89,    90,    -1,    92,    93,
-      -1,    95,    -1,    97,    98,    99,   100,   101,   102,   103,
-      -1,    -1,    -1,    -1,    -1,    -1,     1,    -1,     3,     4,
-       5,     6,     7,    -1,    -1,    -1,    11,    12,   122,   123,
-     124,    16,    -1,    18,    19,    20,    21,    22,    23,    24,
-      -1,   135,    -1,   137,    -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,    -1,    62,    63,    64,
-      -1,    66,    67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    86,    -1,    -1,    89,    90,    -1,    92,    93,    -1,
-      95,    -1,    97,    98,    99,   100,   101,   102,   103,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   122,   123,   124,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   133,    -1,
-     135,     1,   137,     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,    -1,    62,    63,    64,    -1,    66,    67,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,    89,
-      90,    -1,    92,    93,    -1,    95,    -1,    97,    98,    99,
-     100,   101,   102,   103,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   122,   123,   124,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   133,    -1,   135,     1,   137,     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,    -1,    62,    63,    64,
-      -1,    66,    67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    86,    -1,    -1,    89,    90,    -1,    92,    93,    -1,
-      95,    -1,    97,    98,    99,   100,   101,   102,   103,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   122,   123,   124,
-      -1,    -1,   127,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     135,     1,   137,     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,    -1,    62,    63,    64,    -1,    66,    67,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,    89,
-      90,    -1,    92,    93,    -1,    95,    -1,    97,    98,    99,
-     100,   101,   102,   103,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,     3,     4,     5,    -1,     7,    -1,    -1,    -1,
-      11,    12,   122,   123,   124,    16,    -1,    18,    19,    20,
-      21,    22,    23,    24,    -1,   135,    -1,   137,    -1,    30,
-      31,    32,    33,    34,    35,    36,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,    49,    50,
-      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
-      -1,    62,    63,    64,    -1,    66,    67,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,    89,    90,
-      -1,    92,    93,    -1,    95,    96,    97,    98,    99,   100,
-     101,   102,   103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,     3,     4,     5,    -1,     7,    -1,    -1,    -1,    11,
-      12,   122,   123,   124,    16,    -1,    18,    19,    20,    21,
-      22,    23,    24,    -1,    -1,    -1,   137,    -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,    -1,
-      62,    63,    64,    -1,    66,    67,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    86,    -1,    -1,    89,    90,    -1,
-      92,    93,    -1,    -1,    -1,    97,    98,    99,   100,   101,
-     102,   103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       3,     4,     5,     6,     7,    -1,    -1,    -1,    11,    12,
-     122,   123,   124,    16,    -1,    18,    19,    20,    21,    22,
-      23,    24,    -1,   135,    -1,   137,    -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,    -1,    62,
-      63,    64,    -1,    66,    67,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    86,    -1,    -1,    89,    90,    -1,    92,
-      93,    -1,    95,    -1,    97,    98,    99,   100,   101,   102,
-     103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   122,
-     123,   124,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   135,     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,    66,    67,    68,    69,
-      70,    71,    72,    73,    74,    -1,    -1,    77,    78,    -1,
-      -1,    81,    82,    83,    84,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    95,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   112,   113,   114,   115,   116,   117,   118,   119,
-     120,   121,    -1,   123,   124,     3,     4,     5,    -1,     7,
-      -1,   131,   132,    11,    12,    -1,    -1,    -1,    16,    -1,
-      18,    19,    20,    21,    22,    23,    24,    -1,    26,    -1,
-      -1,    -1,    30,    31,    32,    33,    34,    35,    36,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    46,    -1,
-      -1,    49,    50,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    -1,    62,    63,    64,    -1,    66,    67,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,
-      -1,    89,    90,    -1,    92,    93,    -1,    95,    96,    97,
-      98,    99,   100,   101,   102,   103,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   122,   123,   124,    -1,   126,     3,
-       4,     5,    -1,     7,   132,    -1,    -1,    11,    12,    -1,
-      -1,    -1,    16,    -1,    18,    19,    20,    21,    22,    23,
-      24,    -1,    26,    -1,    -1,    -1,    30,    31,    32,    33,
-      34,    35,    36,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    46,    -1,    -1,    49,    50,    51,    52,    53,
-      54,    55,    56,    57,    58,    59,    60,    -1,    62,    63,
-      64,    -1,    66,    67,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    86,    -1,    -1,    89,    90,    -1,    92,    93,
-      -1,    95,    96,    97,    98,    99,   100,   101,   102,   103,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   122,   123,
-     124,    -1,   126,     3,     4,     5,    -1,     7,   132,    -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,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,    49,
-      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
-      60,    -1,    62,    63,    64,    -1,    66,    67,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    86,    87,    -1,    89,
-      90,    -1,    92,    93,    -1,    95,    96,    97,    98,    99,
-     100,   101,   102,   103,    -1,    -1,    -1,    -1,    -1,   109,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   122,   123,   124,     3,     4,     5,    -1,     7,
-      -1,    -1,   132,    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,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    46,    -1,
-      -1,    49,    50,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    -1,    62,    63,    64,    -1,    66,    67,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    87,
-      -1,    89,    90,    -1,    92,    93,    -1,    95,    96,    97,
-      98,    99,   100,   101,   102,   103,    -1,    -1,    -1,    -1,
-      -1,   109,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   122,   123,   124,     3,     4,     5,
-      -1,     7,    -1,    -1,   132,    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,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      46,    -1,    -1,    49,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    -1,    62,    63,    64,    -1,
-      66,    67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      86,    -1,    -1,    89,    90,    -1,    92,    93,    -1,    95,
-      96,    97,    98,    99,   100,   101,   102,   103,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   122,   123,   124,     3,
-       4,     5,    -1,     7,    -1,    -1,   132,    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,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    46,    -1,    -1,    49,    50,    51,    52,    53,
-      54,    55,    56,    57,    58,    59,    60,    -1,    62,    63,
-      64,    -1,    66,    67,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    86,    -1,    -1,    89,    90,    -1,    92,    93,
-      -1,    95,    96,    97,    98,    99,   100,   101,   102,   103,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   122,   123,
-     124,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   132,     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,    66,    67,    68,    69,    70,    71,    72,    73,
-      74,    -1,    -1,    77,    78,    -1,    -1,    81,    82,    83,
-      84,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    95,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   112,   113,
-     114,   115,   116,   117,   118,   119,   120,   121,    -1,   123,
-     124,    -1,    -1,    -1,    -1,    -1,    -1,   131,     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,    66,    67,    68,    69,    70,    71,    72,    73,    74,
-      -1,    -1,    77,    78,    -1,    -1,    81,    82,    83,    84,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      95,    -1,    -1,    98,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   112,   113,   114,
-     115,   116,   117,   118,   119,   120,   121,    -1,   123,   124,
-      -1,    -1,    -1,    -1,    -1,    -1,   131,     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,
-      66,    67,    68,    69,    70,    71,    72,    73,    74,    -1,
-      -1,    77,    78,    -1,    -1,    81,    82,    83,    84,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    95,
-      -1,    -1,    98,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   112,   113,   114,   115,
-     116,   117,   118,   119,   120,   121,    -1,   123,   124,    -1,
-      -1,    -1,    -1,    -1,    -1,   131,     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,    66,
-      67,    68,    69,    70,    71,    72,    73,    74,    -1,    -1,
-      77,    78,    -1,    -1,    81,    82,    83,    84,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    95,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   112,   113,   114,   115,   116,
-     117,   118,   119,   120,   121,    -1,   123,   124,     3,     4,
-       5,    -1,     7,    -1,   131,    -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,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    46,    -1,    -1,    49,    50,    51,    52,    53,    54,
-      55,    56,    57,    -1,    59,    60,    -1,    62,    63,    64,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    86,    -1,    -1,    89,    90,    -1,    92,    93,    -1,
-      -1,    -1,    97,    98,    99,   100,   101,   102,   103,    -1,
-      -1,    -1,    -1,     3,     4,     5,    -1,     7,    -1,    -1,
-      -1,    11,    12,    -1,    -1,    -1,    16,   122,    18,    19,
-      20,    21,    22,    23,    24,   130,    -1,    -1,    -1,    -1,
-      30,    31,    32,    33,    34,    35,    36,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,    49,
-      50,    51,    52,    53,    54,    55,    56,    57,    -1,    59,
-      60,    -1,    62,    63,    64,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,    89,
-      90,    -1,    92,    93,    -1,    -1,    -1,    97,    98,    99,
-     100,   101,   102,   103,    -1,    -1,    -1,    -1,     3,     4,
-       5,     6,     7,    -1,    -1,    -1,    11,    12,    -1,    -1,
-      -1,    16,   122,    18,    19,    20,    21,    22,    23,    24,
-     130,    -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,    -1,    62,    63,    64,
-      -1,    66,    67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    86,    -1,    -1,    89,    90,    -1,    92,    93,    -1,
-      95,    -1,    97,    98,    99,   100,   101,   102,   103,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,
-      -1,     7,    -1,    -1,    -1,    11,    12,   122,   123,   124,
-      16,    -1,    18,    19,    20,    21,    22,    23,    24,    -1,
-      -1,    -1,    -1,    -1,    30,    31,    32,    33,    34,    35,
-      36,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      46,    -1,    -1,    49,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    -1,    62,    63,    64,    -1,
-      66,    67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      86,    -1,    -1,    89,    90,    -1,    92,    93,    -1,    95,
-      96,    97,    98,    99,   100,   101,   102,   103,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,    -1,
-       7,    -1,    -1,    -1,    11,    12,   122,   123,   124,    16,
-      -1,    18,    19,    20,    21,    22,    23,    24,    -1,    -1,
-      -1,    -1,    -1,    30,    31,    32,    33,    34,    35,    36,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    46,
-      -1,    -1,    49,    50,    51,    52,    53,    54,    55,    56,
-      57,    58,    59,    60,    -1,    62,    63,    64,    -1,    66,
-      67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,
-      -1,    -1,    89,    90,    -1,    92,    93,    -1,    95,    96,
-      97,    98,    99,   100,   101,   102,   103,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,     3,     4,     5,    -1,     7,
-      -1,    -1,    -1,    11,    12,   122,   123,   124,    16,    -1,
-      18,    19,    20,    21,    22,    23,    24,    -1,    -1,    -1,
-      -1,    -1,    30,    31,    32,    33,    34,    35,    36,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    46,    -1,
-      -1,    49,    50,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    -1,    62,    63,    64,    -1,    66,    67,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,
-      -1,    89,    90,    -1,    92,    93,    -1,    95,    96,    97,
-      98,    99,   100,   101,   102,   103,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,     3,     4,     5,    -1,     7,    -1,
-      -1,    -1,    11,    12,   122,   123,   124,    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,    -1,    62,    63,    64,    -1,    66,    67,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,
-      89,    90,    -1,    92,    93,    -1,    -1,    96,    97,    98,
-      99,   100,   101,   102,   103,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,     3,     4,     5,    -1,     7,    -1,    -1,
-      -1,    11,    12,   122,   123,   124,    16,    -1,    18,    19,
-      20,    21,    22,    23,    24,    -1,    -1,    -1,    -1,    -1,
-      30,    31,    32,    33,    34,    35,    36,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,    49,
-      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
-      60,    -1,    62,    63,    64,    -1,    66,    67,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,    89,
-      90,    -1,    92,    93,    -1,    95,    96,    97,    98,    99,
-     100,   101,   102,   103,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,     3,     4,     5,    -1,     7,    -1,    -1,    -1,
-      11,    12,   122,   123,   124,    16,    -1,    18,    19,    20,
-      21,    22,    23,    24,    -1,    -1,    -1,    -1,    -1,    30,
-      31,    32,    33,    34,    35,    36,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,    49,    50,
-      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
-      -1,    62,    63,    64,    -1,    66,    67,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,    89,    90,
-      -1,    92,    93,    -1,    95,    -1,    97,    98,    99,   100,
-     101,   102,   103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,     3,     4,     5,    -1,     7,    -1,    -1,    -1,    11,
-      12,   122,   123,   124,    16,    -1,    18,    19,    20,    21,
-      22,    23,    24,    -1,    -1,    -1,    -1,    -1,    30,    31,
-      32,    33,    34,    35,    36,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    46,    -1,    -1,    49,    50,    51,
-      52,    53,    54,    55,    56,    57,    58,    59,    60,    -1,
-      62,    63,    64,    -1,    66,    67,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    86,    -1,    -1,    89,    90,    -1,
-      92,    93,    -1,    -1,    96,    97,    98,    99,   100,   101,
-     102,   103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       3,     4,     5,    -1,     7,    -1,    -1,    -1,    11,    12,
-     122,   123,   124,    16,    -1,    18,    19,    20,    21,    22,
-      23,    24,    -1,    -1,    -1,    -1,    -1,    30,    31,    32,
-      33,    34,    35,    36,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    46,    -1,    -1,    49,    50,    51,    52,
-      53,    54,    55,    56,    57,    58,    59,    60,    -1,    62,
-      63,    64,    -1,    66,    67,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    86,    -1,    -1,    89,    90,    -1,    92,
-      93,    -1,    95,    -1,    97,    98,    99,   100,   101,   102,
-     103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,
-       4,     5,    -1,     7,    -1,    -1,    -1,    11,    12,   122,
-     123,   124,    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,    -1,    62,    63,
-      64,    -1,    66,    67,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    86,    -1,    -1,    89,    90,    -1,    92,    93,
-      -1,    -1,    -1,    97,    98,    99,   100,   101,   102,   103,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,
-       5,    -1,     7,    -1,    -1,    -1,    11,    12,   122,   123,
-     124,    16,    -1,    18,    19,    20,    21,    22,    23,    24,
-      -1,    -1,    -1,    -1,    -1,    30,    31,    32,    33,    34,
-      35,    36,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    46,    -1,    -1,    49,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,    59,    60,    -1,    62,    63,    64,
-      -1,    66,    67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    86,    -1,    -1,    89,    90,    -1,    92,    93,    -1,
-      -1,    -1,    97,    98,    99,   100,   101,   102,   103,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,
-      -1,     7,    -1,    -1,    -1,    11,    12,   122,   123,   124,
-      16,    -1,    18,    19,    20,    21,    22,    23,    24,    -1,
-      -1,    -1,    -1,    -1,    30,    31,    32,    33,    34,    35,
-      36,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      46,    -1,    -1,    49,    50,    51,    52,    53,    54,    55,
-      56,    57,    -1,    59,    60,    -1,    62,    63,    64,    -1,
-      66,    67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      86,    -1,    -1,    89,    90,    -1,    92,    93,    -1,    95,
-      -1,    97,    98,    99,   100,   101,   102,   103,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,    -1,
-       7,    -1,    -1,    -1,    11,    12,   122,   123,   124,    16,
-      -1,    18,    19,    20,    21,    22,    23,    24,    -1,    -1,
-      -1,    -1,    -1,    30,    31,    32,    33,    34,    35,    36,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    46,
-      -1,    -1,    49,    50,    51,    52,    53,    54,    55,    56,
-      57,    -1,    59,    60,    -1,    62,    63,    64,    -1,    66,
-      67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,
-      -1,    -1,    89,    90,    -1,    92,    93,    -1,    95,    -1,
-      97,    98,    99,   100,   101,   102,   103,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,     3,     4,     5,    -1,     7,
-      -1,    -1,    -1,    11,    12,   122,   123,   124,    16,    -1,
-      18,    19,    20,    21,    22,    23,    24,    -1,    -1,    -1,
-      -1,    -1,    30,    31,    32,    33,    34,    35,    36,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    46,    -1,
-      -1,    49,    50,    51,    52,    53,    54,    55,    56,    57,
-      -1,    59,    60,    -1,    62,    63,    64,    -1,    66,    67,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,
-      -1,    89,    90,    -1,    92,    93,    -1,    95,    -1,    97,
-      98,    99,   100,   101,   102,   103,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,     3,     4,     5,    -1,     7,    -1,
-      -1,    -1,    11,    12,   122,   123,   124,    16,    -1,    18,
-      19,    20,    21,    22,    23,    24,    -1,    -1,    -1,    -1,
-      -1,    30,    31,    32,    33,    34,    35,    36,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,
-      49,    50,    51,    52,    53,    54,    55,    56,    57,    -1,
-      59,    60,    -1,    62,    63,    64,    -1,    66,    67,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,
-      89,    90,    -1,    92,    93,    -1,    95,    -1,    97,    98,
-      99,   100,   101,   102,   103,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,     3,     4,     5,    -1,     7,    -1,    -1,
-      -1,    11,    12,   122,   123,   124,    16,    -1,    18,    19,
-      20,    21,    22,    23,    24,    -1,    -1,    -1,    -1,    -1,
-      30,    31,    32,    33,    34,    35,    36,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,    49,
-      50,    51,    52,    53,    54,    55,    56,    57,    -1,    59,
-      60,    -1,    62,    63,    64,    -1,    66,    67,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,    89,
-      90,    -1,    92,    93,    -1,    95,    -1,    97,    98,    99,
-     100,   101,   102,   103,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,     3,     4,     5,    -1,     7,    -1,    -1,    -1,
-      11,    12,   122,   123,   124,    16,    -1,    18,    19,    20,
-      21,    22,    23,    24,    -1,    -1,    -1,    -1,    -1,    30,
-      31,    32,    33,    34,    35,    36,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,    49,    50,
-      51,    52,    53,    54,    55,    56,    57,    -1,    59,    60,
-      -1,    62,    63,    64,    -1,    66,    67,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,    89,    90,
-      -1,    92,    93,    -1,    -1,    -1,    97,    98,    99,   100,
-     101,   102,   103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,     3,     4,     5,    -1,     7,    -1,    -1,    -1,    11,
-      12,   122,   123,   124,    16,    -1,    18,    19,    20,    21,
-      22,    23,    24,    -1,    -1,    -1,    -1,    -1,    30,    31,
-      32,    33,    34,    35,    36,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    46,    -1,    -1,    49,    50,    51,
-      52,    53,    54,    55,    56,    57,    -1,    59,    60,    -1,
-      62,    63,    64,    -1,    66,    67,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    86,    -1,    -1,    89,    90,    -1,
-      92,    93,    -1,    -1,    -1,    97,    98,    99,   100,   101,
-     102,   103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       3,     4,     5,    -1,     7,    -1,    -1,    -1,    11,    12,
-     122,   123,   124,    16,    -1,    18,    19,    20,    21,    22,
-      23,    24,    -1,    -1,    -1,    -1,    -1,    30,    31,    32,
-      33,    34,    35,    36,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    46,    -1,    -1,    49,    50,    51,    52,
-      53,    54,    55,    56,    57,    -1,    59,    60,    -1,    62,
-      63,    64,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      83,    -1,    -1,    86,    -1,    -1,    89,    90,    -1,    92,
-      93,    -1,    -1,    -1,    97,    98,    99,   100,   101,   102,
-     103,    -1,    -1,    -1,    -1,     3,     4,     5,    -1,     7,
-      -1,    -1,    -1,    11,    12,    -1,    -1,    -1,    16,   122,
-      18,    19,    20,    21,    22,    23,    24,    -1,    -1,    -1,
-      -1,    -1,    30,    31,    32,    33,    34,    35,    36,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    46,    -1,
-      -1,    49,    50,    51,    52,    53,    54,    55,    56,    57,
-      -1,    59,    60,    -1,    62,    63,    64,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,
-      -1,    89,    90,    -1,    92,    93,    -1,    95,    -1,    97,
-      98,    99,   100,   101,   102,   103,    -1,    -1,    -1,    -1,
-       3,     4,     5,    -1,     7,    -1,    -1,    -1,    11,    12,
-      -1,    -1,    -1,    16,   122,    18,    19,    20,    21,    22,
-      23,    24,    -1,    -1,    -1,    -1,    -1,    30,    31,    32,
-      33,    34,    35,    36,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    46,    -1,    -1,    49,    50,    51,    52,
-      53,    54,    55,    56,    57,    -1,    59,    60,    -1,    62,
-      63,    64,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    86,    -1,    -1,    89,    90,    -1,    92,
-      93,    -1,    95,    -1,    97,    98,    99,   100,   101,   102,
-     103,    -1,    -1,    -1,    -1,     3,     4,     5,    -1,     7,
-      -1,    -1,    -1,    11,    12,    -1,    -1,    -1,    16,   122,
-      18,    19,    20,    21,    22,    23,    24,    -1,    -1,    -1,
-      -1,    -1,    30,    31,    32,    33,    34,    35,    36,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    46,    -1,
-      -1,    49,    50,    51,    52,    53,    54,    55,    56,    57,
-      -1,    59,    60,    -1,    62,    63,    64,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,
-      -1,    89,    90,    -1,    92,    93,    -1,    -1,    -1,    97,
-      98,    99,   100,   101,   102,   103,    -1,    -1,    -1,    -1,
-       3,     4,     5,    -1,     7,    -1,    -1,    -1,    11,    12,
-      -1,    -1,    -1,    16,   122,    18,    19,    20,    21,    22,
-      23,    24,    -1,    -1,    -1,    -1,    -1,    30,    31,    32,
-      33,    34,    35,    36,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    46,    -1,    -1,    49,    50,    51,    52,
-      53,    54,    55,    56,    57,    -1,    59,    60,    -1,    62,
-      63,    64,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    86,    -1,    -1,    89,    90,    -1,    92,
-      93,    -1,    -1,    -1,    97,    98,    99,   100,   101,   102,
-     103,    -1,    -1,    -1,    -1,     3,     4,     5,    -1,     7,
-      -1,    -1,    -1,    11,    12,    -1,    -1,    -1,    16,   122,
-      18,    19,    20,    21,    22,    23,    24,    -1,    -1,    -1,
-      -1,    -1,    30,    31,    32,    33,    34,    35,    36,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    46,    -1,
-      -1,    49,    50,    51,    52,    53,    54,    55,    56,    57,
-      -1,    59,    60,    -1,    62,    63,    64,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,
-      -1,    89,    90,    -1,    92,    93,    -1,    -1,    -1,    97,
-      98,    99,   100,   101,   102,   103,    -1,    -1,    -1,    -1,
-      -1,    52,    53,    -1,    -1,    56,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   122,    66,    67,    68,    69,    70,
-      71,    72,    73,    74,    -1,    -1,    77,    78,    -1,    -1,
-      81,    82,    83,    84,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    95,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   112,   113,   114,   115,   116,   117,   118,   119,   120,
-     121,    -1,   123,   124,    52,    53,    -1,    -1,    56,    -1,
-     131,   132,    -1,    -1,    -1,    -1,    -1,    -1,    66,    67,
-      68,    69,    70,    71,    72,    73,    74,    -1,    -1,    77,
-      78,    -1,    -1,    81,    82,    83,    84,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    95,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   112,   113,   114,   115,   116,   117,
-     118,   119,   120,   121,    -1,   123,   124,    52,    53,    -1,
-      -1,    56,    -1,   131,   132,    -1,    -1,    -1,    -1,    -1,
-      -1,    66,    67,    68,    69,    70,    71,    72,    73,    74,
-      -1,    -1,    77,    78,    -1,    -1,    81,    82,    83,    84,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      95,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   112,   113,   114,
-     115,   116,   117,   118,   119,   120,   121,    -1,   123,   124,
-      52,    53,    -1,    -1,    56,    -1,   131,   132,    -1,    -1,
-      -1,    -1,    -1,    -1,    66,    67,    68,    69,    70,    71,
-      72,    73,    74,    -1,    -1,    77,    78,    -1,    -1,    81,
-      82,    83,    84,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    95,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
-      -1,   123,   124,    52,    53,    -1,    -1,    56,    -1,   131,
-     132,    -1,    -1,    -1,    -1,    -1,    -1,    66,    67,    68,
-      69,    70,    71,    72,    73,    74,    -1,    -1,    77,    78,
-      -1,    -1,    81,    82,    83,    84,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    95,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   112,   113,   114,   115,   116,   117,   118,
-     119,   120,   121,    -1,   123,   124,    52,    53,    -1,    -1,
-      56,    -1,   131,   132,    -1,    -1,    -1,    -1,    -1,    -1,
-      66,    67,    68,    69,    70,    71,    72,    73,    74,    -1,
-      -1,    77,    78,    -1,    -1,    81,    82,    83,    84,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    95,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   112,   113,   114,   115,
-     116,   117,   118,   119,   120,   121,    -1,   123,   124,    52,
-      53,    -1,    -1,    56,    -1,   131,   132,    -1,    -1,    -1,
-      -1,    -1,    -1,    66,    67,    68,    69,    70,    71,    72,
-      73,    74,    -1,    -1,    77,    78,    -1,    -1,    81,    82,
-      83,    84,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    95,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   112,
-     113,   114,   115,   116,   117,   118,   119,   120,   121,    -1,
-     123,   124,    52,    53,    -1,    -1,    56,    -1,   131,   132,
-      -1,    -1,    -1,    -1,    -1,    -1,    66,    67,    68,    69,
-      70,    71,    72,    73,    74,    -1,    -1,    77,    78,    -1,
-      -1,    81,    82,    83,    84,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    95,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   112,   113,   114,   115,   116,   117,   118,   119,
-     120,   121,    -1,   123,   124,    52,    53,    -1,    -1,    56,
-      -1,   131,   132,    -1,    -1,    -1,    -1,    -1,    -1,    66,
-      67,    68,    69,    70,    71,    72,    73,    74,    -1,    -1,
-      77,    78,    -1,    -1,    81,    82,    83,    84,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    95,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   112,   113,   114,   115,   116,
-     117,   118,   119,   120,   121,    -1,   123,   124,    52,    53,
-      -1,    -1,    56,    -1,   131,   132,    -1,    -1,    -1,    -1,
-      -1,    -1,    66,    67,    68,    69,    70,    71,    72,    73,
-      74,    -1,    -1,    77,    78,    -1,    -1,    81,    82,    83,
-      84,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    95,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   112,   113,
-     114,   115,   116,   117,   118,   119,   120,   121,    -1,   123,
-     124,    52,    53,    -1,    -1,    56,    -1,   131,   132,    -1,
-      -1,    -1,    -1,    -1,    -1,    66,    67,    68,    69,    70,
-      71,    72,    73,    74,    -1,    -1,    77,    78,    -1,    -1,
-      81,    82,    83,    84,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    95,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   112,   113,   114,   115,   116,   117,   118,   119,   120,
-     121,    -1,   123,   124,    52,    53,    -1,    -1,    56,    -1,
-     131,   132,    -1,    -1,    -1,    -1,    -1,    -1,    66,    67,
-      68,    69,    70,    71,    72,    73,    74,    -1,    -1,    77,
-      78,    -1,    -1,    81,    82,    83,    84,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    95,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   112,   113,   114,   115,   116,   117,
-     118,   119,   120,   121,    -1,   123,   124,    52,    53,    -1,
-      -1,    56,    -1,   131,   132,    -1,    -1,    -1,    -1,    -1,
-      -1,    66,    67,    68,    69,    70,    71,    72,    73,    74,
-      -1,    -1,    77,    78,    -1,    -1,    81,    82,    83,    84,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      95,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   112,   113,   114,
-     115,   116,   117,   118,   119,   120,   121,    -1,   123,   124,
-      -1,    -1,    -1,    -1,    -1,    -1,   131,    68,    69,    70,
-      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-      -1,    -1,    83,    84,    -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,   110,
-      -1,   112,   113,   114,   115,   116,   117,   118,   119,   120,
-     121,    -1,    68,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    -1,   137,    83,    84,    -1,
-      -1,    -1,    88,    68,    69,    70,    71,    72,    73,    74,
-      -1,    -1,    77,    78,    -1,    -1,    -1,    -1,    83,    84,
-      -1,    -1,    -1,    -1,   110,    -1,   112,   113,   114,   115,
-     116,   117,   118,   119,   120,   121,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   130,    -1,    -1,   112,   113,   114,
-     115,   116,   117,   118,   119,   120,   121
-};
-
-/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
-   symbol of state STATE-NUM.  */
-static const yytype_uint16 yystos[] =
-{
-       0,   139,   140,     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,    62,    63,    64,    66,    67,    86,    89,
-      90,    92,    93,    95,    97,    98,    99,   100,   101,   102,
-     103,   122,   123,   124,   142,   143,   144,   147,   149,   150,
-     153,   154,   156,   157,   158,   160,   161,   171,   189,   206,
-     227,   228,   238,   239,   240,   241,   242,   243,   244,   247,
-     255,   257,   258,   259,   260,   261,   262,   283,   294,   144,
-      21,    22,    30,    31,    32,    46,    52,    56,    83,    86,
-      89,   122,   162,   163,   189,   206,   259,   262,   283,   163,
-       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,    66,    67,    68,    69,    70,    71,
-      72,    73,    74,    77,    78,    81,    82,    83,    84,    95,
-     112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
-     123,   124,   131,   132,   164,   169,   170,   260,   278,    33,
-      34,    35,    36,    49,    50,    51,    52,    56,   164,   165,
-     166,   167,   255,   257,   190,    86,   147,   148,   161,   206,
-     259,   261,   262,   148,   135,   137,   148,   287,   292,   293,
-     193,   195,    86,   154,   161,   206,   211,   259,   262,    58,
-      95,    96,   123,   153,   171,   173,   178,   185,   187,   281,
-     282,   178,   178,   132,   180,   181,   132,   175,   180,   147,
-      54,   166,   137,   288,   146,   126,   171,   206,   171,    56,
-      89,   142,   155,   156,   147,   174,   187,   281,   294,   173,
-     280,   281,   294,    86,   130,   160,   206,   259,   262,   221,
-     222,    54,    55,    57,   164,   250,   256,   249,   250,   250,
-     136,   245,   136,   248,    59,    60,   149,   171,   171,   287,
-     293,    40,    41,    42,    43,    44,    37,    38,    28,   225,
-     109,   130,    89,    95,   157,   109,    68,    69,    70,    71,
-      72,    73,    74,    75,    76,    77,    78,    79,    80,    83,
-      84,   110,   112,   113,   114,   115,   116,   117,   118,   119,
-     120,   121,    85,   128,   129,    85,   129,    26,   126,   229,
-     241,    87,    87,   175,   180,   229,   288,   147,    52,    56,
-     162,    59,    60,     1,   113,   263,   292,    85,   128,   129,
-     202,   279,   203,    85,   129,   286,   130,   141,   142,    56,
-      13,   207,   292,   109,    85,   128,   129,    87,    87,   207,
-     287,    17,   232,   135,   148,   148,    56,    85,   128,   129,
-      25,   173,   173,   173,    88,   130,   186,   294,   130,   186,
-     178,   288,   289,    90,   178,   182,   177,   178,   294,    54,
-      63,    64,   145,   132,   172,   126,   142,    85,   129,    87,
-     155,   133,   289,   191,   134,   130,   137,   291,   130,   291,
-     127,   291,    56,   157,   159,   130,    85,   128,   129,    52,
-      54,    55,    56,    57,    58,    89,    95,    96,   116,   119,
-     132,   223,   266,   267,   268,   269,   270,   271,   272,   273,
-     274,   275,   276,    61,   104,   105,   106,   251,   106,   251,
-     106,    65,   106,   106,   246,   251,   106,    61,   106,    68,
-      68,   144,   148,   148,   148,   148,   144,   147,   147,   226,
-      95,   149,   173,   187,   188,   155,   130,   160,   130,   149,
-     171,   173,   188,   171,   171,   171,   171,   171,   171,   171,
-     171,   171,   171,   171,   171,   171,   171,   171,   171,   171,
-     171,   171,   171,   171,   171,   171,   171,   171,   171,    52,
-      53,    56,   169,   175,   284,   285,   177,    52,    53,    56,
-     169,   175,   284,    52,    56,   284,   284,   231,   230,   149,
-     171,   149,   171,    94,   151,   200,   292,   264,   199,    52,
-      56,   162,   284,   177,   284,   141,   147,   132,   265,   266,
-     204,   168,    10,     8,   234,   294,   142,    13,   171,    52,
-      56,   177,    52,    56,   142,   232,   187,    10,    27,   208,
-     292,   208,    52,    56,   177,    52,    56,   197,   173,    95,
-     173,   185,   281,   282,   289,   133,   171,   173,   179,   183,
-     185,   281,   289,   166,   192,   171,   142,   127,   171,   289,
-     289,   281,   130,   159,    52,    56,   177,    52,    56,    88,
-     109,    52,    52,    89,    95,   212,   213,   214,   268,   266,
-      29,   107,   224,   135,   218,   294,   130,   277,   294,   130,
-     277,    52,   130,   277,    52,   253,   252,   136,   251,   136,
-     171,   171,    76,   114,   216,   217,   294,   173,   130,   289,
-     159,   130,    44,   288,    87,    87,   175,   180,   288,   290,
-      87,    87,   175,   176,   180,   294,   176,   180,   176,   180,
-     216,   216,    44,   152,   292,   148,   141,   290,    10,   289,
-     266,   141,   292,   164,   166,   173,   188,   235,   294,    15,
-     210,   294,    14,   209,   210,    87,   290,    87,    87,   210,
-      10,   130,   207,   194,   196,   290,   148,   173,   186,   130,
-     184,   289,   186,   147,   127,   291,   157,   290,    52,   173,
-     214,   130,   268,   130,   289,   218,   142,   142,    52,   219,
-     220,   267,   269,   272,   274,   276,   270,   271,   274,   270,
-     142,    54,    55,    57,   254,   262,   215,   218,   270,   274,
-     276,   142,    95,   173,   159,   171,   111,   149,   171,   171,
-     151,   134,    87,   149,   171,   149,   171,   151,   142,   142,
-     171,   216,   201,   292,    10,   289,    10,   205,    88,   236,
-     294,   142,     9,   237,   294,   148,    10,    87,    10,   173,
-     142,   142,   142,   208,   185,   187,   281,   289,   289,   289,
-     213,   130,    95,   212,   289,    10,   127,   130,   130,   277,
-     130,   277,   130,   277,   130,   277,   277,   127,   218,   114,
-     130,   277,   130,   277,    10,   173,   171,   149,   171,    10,
-     127,   142,   141,   265,    86,   161,   206,   259,   262,   207,
-     142,   207,   210,   232,   233,    10,    10,   198,   130,   186,
-     186,   130,   213,   130,   268,   220,   270,   274,   270,   270,
-     114,   274,   270,   127,    10,   141,    56,    85,   128,   129,
-     142,   142,   142,   281,   213,   130,   277,   130,   277,   277,
-     277,   130,   277,   277,    10,    52,    56,   177,    52,    56,
-     234,   209,    10,   186,   213,   270,   270,   290,   277,   277
-};
-
-#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.  */
-
-#define YYFAIL		goto yyerrlab
-
-#define YYRECOVERING()  (!!yyerrstatus)
-
-#define YYBACKUP(Token, Value)					\
-do								\
-  if (yychar == YYEMPTY && yylen == 1)				\
-    {								\
-      yychar = (Token);						\
-      yylval = (Value);						\
-      yytoken = YYTRANSLATE (yychar);				\
-      YYPOPSTACK (1);						\
-      goto yybackup;						\
-    }								\
-  else								\
-    {								\
-      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
-
-
-/* YY_LOCATION_PRINT -- Print the location on the stream.
-   This macro was not mandated originally: define only if we know
-   we won't break user code: when these are the locations we know.  */
-
-#ifndef YY_LOCATION_PRINT
-# if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL
-#  define YY_LOCATION_PRINT(File, Loc)			\
-     fprintf (File, "%d.%d-%d.%d",			\
-	      (Loc).first_line, (Loc).first_column,	\
-	      (Loc).last_line,  (Loc).last_column)
-# else
-#  define YY_LOCATION_PRINT(File, Loc) ((void) 0)
-# endif
-#endif
-
-
-/* YYLEX -- calling `yylex' with the right arguments.  */
-
-#ifdef YYLEX_PARAM
-# define YYLEX yylex (&yylval, YYLEX_PARAM)
-#else
-# define YYLEX yylex (&yylval)
-#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 *bottom, yytype_int16 *top)
-#else
-static void
-yy_stack_print (bottom, top)
-    yytype_int16 *bottom;
-    yytype_int16 *top;
-#endif
-{
-  YYFPRINTF (stderr, "Stack now");
-  for (; bottom <= top; ++bottom)
-    YYFPRINTF (stderr, " %d", *bottom);
-  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++)
-    {
-      fprintf (stderr, "   $%d = ", yyi + 1);
-      yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
-		       &(yyvsp[(yyi + 1) - (yynrhs)])
-		       		       , parser);
-      fprintf (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.  */
-int yydebug;
-#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 YYRESULT an error message about the unexpected token
-   YYCHAR while in state YYSTATE.  Return the number of bytes copied,
-   including the terminating null byte.  If YYRESULT is null, do not
-   copy anything; just return the number of bytes that would be
-   copied.  As a special case, return 0 if an ordinary "syntax error"
-   message will do.  Return YYSIZE_MAXIMUM if overflow occurs during
-   size calculation.  */
-static YYSIZE_T
-yysyntax_error (char *yyresult, int yystate, int yychar)
-{
-  int yyn = yypact[yystate];
-
-  if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
-    return 0;
-  else
-    {
-      int yytype = YYTRANSLATE (yychar);
-      YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
-      YYSIZE_T yysize = yysize0;
-      YYSIZE_T yysize1;
-      int yysize_overflow = 0;
-      enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
-      char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
-      int yyx;
-
-# if 0
-      /* This is so xgettext sees the translatable formats that are
-	 constructed on the fly.  */
-      YY_("syntax error, unexpected %s");
-      YY_("syntax error, unexpected %s, expecting %s");
-      YY_("syntax error, unexpected %s, expecting %s or %s");
-      YY_("syntax error, unexpected %s, expecting %s or %s or %s");
-      YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
-# endif
-      char *yyfmt;
-      char const *yyf;
-      static char const yyunexpected[] = "syntax error, unexpected %s";
-      static char const yyexpecting[] = ", expecting %s";
-      static char const yyor[] = " or %s";
-      char yyformat[sizeof yyunexpected
-		    + sizeof yyexpecting - 1
-		    + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
-		       * (sizeof yyor - 1))];
-      char const *yyprefix = yyexpecting;
-
-      /* Start YYX at -YYN if negative to avoid negative indexes in
-	 YYCHECK.  */
-      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 yycount = 1;
-
-      yyarg[0] = yytname[yytype];
-      yyfmt = yystpcpy (yyformat, yyunexpected);
-
-      for (yyx = yyxbegin; yyx < yyxend; ++yyx)
-	if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
-	  {
-	    if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
-	      {
-		yycount = 1;
-		yysize = yysize0;
-		yyformat[sizeof yyunexpected - 1] = '\0';
-		break;
-	      }
-	    yyarg[yycount++] = yytname[yyx];
-	    yysize1 = yysize + yytnamerr (0, yytname[yyx]);
-	    yysize_overflow |= (yysize1 < yysize);
-	    yysize = yysize1;
-	    yyfmt = yystpcpy (yyfmt, yyprefix);
-	    yyprefix = yyor;
-	  }
-
-      yyf = YY_(yyformat);
-      yysize1 = yysize + yystrlen (yyf);
-      yysize_overflow |= (yysize1 < yysize);
-      yysize = yysize1;
-
-      if (yysize_overflow)
-	return YYSIZE_MAXIMUM;
-
-      if (yyresult)
-	{
-	  /* 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 = yyresult;
-	  int yyi = 0;
-	  while ((*yyp = *yyf) != '\0')
-	    {
-	      if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
-		{
-		  yyp += yytnamerr (yyp, yyarg[yyi++]);
-		  yyf += 2;
-		}
-	      else
-		{
-		  yyp++;
-		  yyf++;
-		}
-	    }
-	}
-      return yysize;
-    }
-}
-#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 look-ahead symbol.  */
-int yychar;
-
-/* The semantic value of the look-ahead symbol.  */
-YYSTYPE yylval;
-
-/* Number of syntax errors so far.  */
-int yynerrs;
-
-  int yystate;
-  int yyn;
-  int yyresult;
-  /* Number of tokens to shift before error messages enabled.  */
-  int yyerrstatus;
-  /* Look-ahead token as an internal (translated) token number.  */
-  int yytoken = 0;
-#if YYERROR_VERBOSE
-  /* Buffer for error messages, and its allocated size.  */
-  char yymsgbuf[128];
-  char *yymsg = yymsgbuf;
-  YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
-#endif
-
-  /* Three stacks and their tools:
-     `yyss': related to states,
-     `yyvs': related to semantic values,
-     `yyls': related to locations.
-
-     Refer to the stacks thru separate pointers, to allow yyoverflow
-     to reallocate them elsewhere.  */
-
-  /* The state stack.  */
-  yytype_int16 yyssa[YYINITDEPTH];
-  yytype_int16 *yyss = yyssa;
-  yytype_int16 *yyssp;
-
-  /* The semantic value stack.  */
-  YYSTYPE yyvsa[YYINITDEPTH];
-  YYSTYPE *yyvs = yyvsa;
-  YYSTYPE *yyvsp;
-
-
-
-#define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
-
-  YYSIZE_T yystacksize = YYINITDEPTH;
-
-  /* The variables used to return semantic value and location from the
-     action routines.  */
-  YYSTYPE yyval;
-
-
-  /* The number of symbols on the RHS of the reduced rule.
-     Keep to zero when no symbol should be popped.  */
-  int yylen = 0;
-
-  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);
-	YYSTACK_RELOCATE (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));
-
-  goto yybackup;
-
-/*-----------.
-| yybackup.  |
-`-----------*/
-yybackup:
-
-  /* Do appropriate processing given the current state.  Read a
-     look-ahead token if we need one and don't already have one.  */
-
-  /* First try to decide what to do without reference to look-ahead token.  */
-  yyn = yypact[yystate];
-  if (yyn == YYPACT_NINF)
-    goto yydefault;
-
-  /* Not known => get a look-ahead token if don't already have one.  */
-
-  /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead 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 (yyn == 0 || yyn == YYTABLE_NINF)
-	goto yyerrlab;
-      yyn = -yyn;
-      goto yyreduce;
-    }
-
-  if (yyn == YYFINAL)
-    YYACCEPT;
-
-  /* Count tokens shifted since error; after three, turn off error
-     status.  */
-  if (yyerrstatus)
-    yyerrstatus--;
-
-  /* Shift the look-ahead token.  */
-  YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
-
-  /* Discard the shifted token unless it is eof.  */
-  if (yychar != YYEOF)
-    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 787 "parse.y"
-    {
-			lex_state = EXPR_BEG;
-		    /*%%%*/
-			local_push(compile_for_eval);
-		    /*%
-		    %*/
-		    ;}
-    break;
-
-  case 3:
-#line 795 "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);
-			    }
-			}
-			GC_WB(&ruby_eval_tree, NEW_SCOPE(0, block_append(ruby_eval_tree, (yyvsp[(2) - (2)].node))));
-			local_pop();
-		    /*%
-			$$ = $2;
-			parser->result = dispatch1(program, $$);
-		    %*/
-		    ;}
-    break;
-
-  case 4:
-#line 821 "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(body_stmt,
-				       escape_Qundef($1),
-				       escape_Qundef($2),
-				       escape_Qundef($3),
-				       escape_Qundef($4));
-		    %*/
-		    ;}
-    break;
-
-  case 5:
-#line 851 "parse.y"
-    {
-		    /*%%%*/
-			void_stmts((yyvsp[(1) - (2)].node));
-		    /*%
-		    %*/
-			(yyval.node) = (yyvsp[(1) - (2)].node);
-		    ;}
-    break;
-
-  case 6:
-#line 861 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = NEW_BEGIN(0);
-		    /*%
-			$$ = dispatch2(stmts_add, dispatch0(stmts_new),
-						  dispatch0(void_stmt));
-		    %*/
-		    ;}
-    break;
-
-  case 7:
-#line 870 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = newline_node((yyvsp[(1) - (1)].node));
-		    /*%
-			$$ = dispatch2(stmts_add, dispatch0(stmts_new), $1);
-		    %*/
-		    ;}
-    break;
-
-  case 8:
-#line 878 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = block_append((yyvsp[(1) - (3)].node), newline_node((yyvsp[(3) - (3)].node)));
-		    /*%
-			$$ = dispatch2(stmts_add, $1, $3);
-		    %*/
-		    ;}
-    break;
-
-  case 9:
-#line 886 "parse.y"
-    {
-			(yyval.node) = remove_begin((yyvsp[(2) - (2)].node));
-		    ;}
-    break;
-
-  case 10:
-#line 891 "parse.y"
-    {lex_state = EXPR_FNAME;;}
-    break;
-
-  case 11:
-#line 892 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = NEW_ALIAS((yyvsp[(2) - (4)].node), (yyvsp[(4) - (4)].node));
-		    /*%
-			$$ = dispatch2(alias, $2, $4);
-		    %*/
-		    ;}
-    break;
-
-  case 12:
-#line 900 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = NEW_VALIAS((yyvsp[(2) - (3)].id), (yyvsp[(3) - (3)].id));
-		    /*%
-			$$ = dispatch2(var_alias, $2, $3);
-		    %*/
-		    ;}
-    break;
-
-  case 13:
-#line 908 "parse.y"
-    {
-		    /*%%%*/
-			char buf[3];
-
-			sprintf(buf, "$%c", (char)(yyvsp[(3) - (3)].node)->nd_nth);
-			(yyval.node) = NEW_VALIAS((yyvsp[(2) - (3)].id), rb_intern(buf));
-		    /*%
-			$$ = dispatch2(var_alias, $2, $3);
-		    %*/
-		    ;}
-    break;
-
-  case 14:
-#line 919 "parse.y"
-    {
-		    /*%%%*/
-			yyerror("can't make alias for the number variables");
-			(yyval.node) = NEW_BEGIN(0);
-		    /*%
-			$$ = dispatch2(var_alias, $2, $3);
-			$$ = dispatch1(alias_error, $$);
-		    %*/
-		    ;}
-    break;
-
-  case 15:
-#line 929 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = (yyvsp[(2) - (2)].node);
-		    /*%
-			$$ = dispatch1(undef, $2);
-		    %*/
-		    ;}
-    break;
-
-  case 16:
-#line 937 "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 17:
-#line 946 "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 18:
-#line 955 "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 19:
-#line 968 "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 20:
-#line 981 "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, $3, $1);
-		    %*/
-		    ;}
-    break;
-
-  case 21:
-#line 990 "parse.y"
-    {
-			if (in_def || in_single) {
-			    yyerror("BEGIN in method");
-			}
-		    /*%%%*/
-			/* local_push(0); */
-		    /*%
-		    %*/
-		    ;}
-    break;
-
-  case 22:
-#line 1000 "parse.y"
-    {
-		    /*%%%*/
-			ruby_eval_tree_begin = block_append(ruby_eval_tree_begin,
-							    (yyvsp[(4) - (5)].node));
-			/* NEW_PREEXE($4)); */
-			/* local_pop(); */
-			(yyval.node) = 0;
-		    /*%
-			$$ = dispatch1(BEGIN, $4);
-		    %*/
-		    ;}
-    break;
-
-  case 23:
-#line 1012 "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 24:
-#line 1024 "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 25:
-#line 1033 "parse.y"
-    {
-		    /*%%%*/
-			value_expr((yyvsp[(3) - (3)].node));
-			GC_WB(&(yyvsp[(1) - (3)].node)->nd_value, (yyvsp[(3) - (3)].node));
-			(yyval.node) = (yyvsp[(1) - (3)].node);
-		    /*%
-			$$ = dispatch2(massign, $1, $3);
-		    %*/
-		    ;}
-    break;
-
-  case 26:
-#line 1043 "parse.y"
-    {
-		    /*%%%*/
-			value_expr((yyvsp[(3) - (3)].node));
-			if ((yyvsp[(1) - (3)].node)) {
-			    ID vid = (yyvsp[(1) - (3)].node)->nd_vid;
-			    if ((yyvsp[(2) - (3)].id) == tOROP) {
-				GC_WB(&(yyvsp[(1) - (3)].node)->nd_value, (yyvsp[(3) - (3)].node));
-				(yyval.node) = NEW_OP_ASGN_OR(gettable(vid), (yyvsp[(1) - (3)].node));
-				if (is_asgn_or_id(vid)) {
-				    (yyval.node)->nd_aid = vid;
-				}
-			    }
-			    else if ((yyvsp[(2) - (3)].id) == tANDOP) {
-				GC_WB(&(yyvsp[(1) - (3)].node)->nd_value, (yyvsp[(3) - (3)].node));
-				(yyval.node) = NEW_OP_ASGN_AND(gettable(vid), (yyvsp[(1) - (3)].node));
-			    }
-			    else {
-				(yyval.node) = (yyvsp[(1) - (3)].node);
-				GC_WB(&(yyval.node)->nd_value, NEW_CALL(gettable(vid), (yyvsp[(2) - (3)].id), NEW_LIST((yyvsp[(3) - (3)].node))));
-			    }
-			}
-			else {
-			    (yyval.node) = NEW_BEGIN(0);
-			}
-		    /*%
-			$$ = dispatch3(opassign, $1, $2, $3);
-		    %*/
-		    ;}
-    break;
-
-  case 27:
-#line 1072 "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[(6) - (6)].node), (yyvsp[(3) - (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 28:
-#line 1093 "parse.y"
-    {
-		    /*%%%*/
-			value_expr((yyvsp[(5) - (5)].node));
-			if ((yyvsp[(4) - (5)].id) == tOROP) {
-			    (yyvsp[(4) - (5)].id) = 0;
-			}
-			else if ((yyvsp[(4) - (5)].id) == tANDOP) {
-			    (yyvsp[(4) - (5)].id) = 1;
-			}
-			(yyval.node) = NEW_OP_ASGN2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
-			fixpos((yyval.node), (yyvsp[(1) - (5)].node));
-		    /*%
-			$$ = dispatch3(field, $1, ripper_id2sym('.'), $3);
-			$$ = dispatch3(opassign, $$, $4, $5);
-		    %*/
-		    ;}
-    break;
-
-  case 29:
-#line 1110 "parse.y"
-    {
-		    /*%%%*/
-			value_expr((yyvsp[(5) - (5)].node));
-			if ((yyvsp[(4) - (5)].id) == tOROP) {
-			    (yyvsp[(4) - (5)].id) = 0;
-			}
-			else if ((yyvsp[(4) - (5)].id) == tANDOP) {
-			    (yyvsp[(4) - (5)].id) = 1;
-			}
-			(yyval.node) = NEW_OP_ASGN2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
-			fixpos((yyval.node), (yyvsp[(1) - (5)].node));
-		    /*%
-			$$ = dispatch3(field, $1, ripper_id2sym('.'), $3);
-			$$ = dispatch3(opassign, $$, $4, $5);
-		    %*/
-		    ;}
-    break;
-
-  case 30:
-#line 1127 "parse.y"
-    {
-		    /*%%%*/
-			value_expr((yyvsp[(5) - (5)].node));
-			if ((yyvsp[(4) - (5)].id) == tOROP) {
-			    (yyvsp[(4) - (5)].id) = 0;
-			}
-			else if ((yyvsp[(4) - (5)].id) == tANDOP) {
-			    (yyvsp[(4) - (5)].id) = 1;
-			}
-			(yyval.node) = NEW_OP_ASGN2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
-			fixpos((yyval.node), (yyvsp[(1) - (5)].node));
-		    /*%
-			$$ = dispatch3(field, $1, ripper_intern("::"), $3);
-			$$ = dispatch3(opassign, $$, $4, $5);
-		    %*/
-		    ;}
-    break;
-
-  case 31:
-#line 1144 "parse.y"
-    {
-		    /*%%%*/
-			rb_backref_error((yyvsp[(1) - (3)].node));
-			(yyval.node) = NEW_BEGIN(0);
-		    /*%
-			$$ = dispatch2(assign, dispatch1(var_field, $1), $3);
-			$$ = dispatch1(assign_error, $$);
-		    %*/
-		    ;}
-    break;
-
-  case 32:
-#line 1154 "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 33:
-#line 1163 "parse.y"
-    {
-		    /*%%%*/
-			GC_WB(&(yyvsp[(1) - (3)].node)->nd_value, (yyvsp[(3) - (3)].node));
-			(yyval.node) = (yyvsp[(1) - (3)].node);
-		    /*%
-			dispatch2(massign, $1, $3);
-		    %*/
-		    ;}
-    break;
-
-  case 34:
-#line 1172 "parse.y"
-    {
-		    /*%%%*/
-			GC_WB(&(yyvsp[(1) - (3)].node)->nd_value, (yyvsp[(3) - (3)].node));
-			(yyval.node) = (yyvsp[(1) - (3)].node);
-		    /*%
-			$$ = dispatch2(massign, $1, $3);
-		    %*/
-		    ;}
-    break;
-
-  case 37:
-#line 1185 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = logop(NODE_AND, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
-		    /*%
-			$$ = dispatch3(binary, $1, ripper_intern("and"), $3);
-		    %*/
-		    ;}
-    break;
-
-  case 38:
-#line 1193 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = logop(NODE_OR, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
-		    /*%
-			$$ = dispatch3(binary, $1, ripper_intern("or"), $3);
-		    %*/
-		    ;}
-    break;
-
-  case 39:
-#line 1201 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = call_uni_op(cond((yyvsp[(2) - (2)].node)), '!');
-		    /*%
-			$$ = dispatch2(unary, ripper_intern("not"), $2);
-		    %*/
-		    ;}
-    break;
-
-  case 40:
-#line 1209 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = call_uni_op(cond((yyvsp[(2) - (2)].node)), '!');
-		    /*%
-			$$ = dispatch2(unary, ripper_id2sym('!'), $2);
-		    %*/
-		    ;}
-    break;
-
-  case 42:
-#line 1220 "parse.y"
-    {
-		    /*%%%*/
-			value_expr((yyvsp[(1) - (1)].node));
-			(yyval.node) = (yyvsp[(1) - (1)].node);
-		        if (!(yyval.node)) (yyval.node) = NEW_NIL();
-		    /*%
-			$$ = $1;
-		    %*/
-		    ;}
-    break;
-
-  case 45:
-#line 1234 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = NEW_RETURN(ret_args((yyvsp[(2) - (2)].node)));
-		    /*%
-			$$ = dispatch1(return, $2);
-		    %*/
-		    ;}
-    break;
-
-  case 46:
-#line 1242 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = NEW_BREAK(ret_args((yyvsp[(2) - (2)].node)));
-		    /*%
-			$$ = dispatch1(break, $2);
-		    %*/
-		    ;}
-    break;
-
-  case 47:
-#line 1250 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = NEW_NEXT(ret_args((yyvsp[(2) - (2)].node)));
-		    /*%
-			$$ = dispatch1(next, $2);
-		    %*/
-		    ;}
-    break;
-
-  case 49:
-#line 1261 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
-		    /*%
-			$$ = dispatch3(call, $1, ripper_id2sym('.'), $3);
-			$$ = method_arg($$, $4);
-		    %*/
-		    ;}
-    break;
-
-  case 50:
-#line 1270 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
-		    /*%
-			$$ = dispatch3(call, $1, ripper_intern("::"), $3);
-			$$ = method_arg($$, $4);
-		    %*/
-		    ;}
-    break;
-
-  case 51:
-#line 1281 "parse.y"
-    {
-		    /*%%%*/
-			dyna_push();
-			(yyval.num) = ruby_sourceline;
-		    /*%
-		    %*/
-		    ;}
-    break;
-
-  case 52:
-#line 1291 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node));
-			nd_set_line((yyval.node), (yyvsp[(2) - (5)].num));
-			dyna_pop();
-		    /*%
-			$$ = dispatch2(brace_block, escape_Qundef($3), $4);
-		    %*/
-		    ;}
-    break;
-
-  case 53:
-#line 1303 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = NEW_FCALL((yyvsp[(1) - (2)].id), (yyvsp[(2) - (2)].node));
-			fixpos((yyval.node), (yyvsp[(2) - (2)].node));
-		    /*%
-			$$ = dispatch2(command, $1, $2);
-		    %*/
-		    ;}
-    break;
-
-  case 54:
-#line 1312 "parse.y"
-    {
-		    /*%%%*/
-			block_dup_check((yyvsp[(2) - (3)].node),(yyvsp[(3) - (3)].node));
-		        GC_WB(&(yyvsp[(3) - (3)].node)->nd_iter, NEW_FCALL((yyvsp[(1) - (3)].id), (yyvsp[(2) - (3)].node)));
-			(yyval.node) = (yyvsp[(3) - (3)].node);
-			fixpos((yyval.node), (yyvsp[(2) - (3)].node));
-		    /*%
-			$$ = dispatch2(command, $1, $2);
-			$$ = method_add_block($$, $3);
-		    %*/
-		    ;}
-    break;
-
-  case 55:
-#line 1324 "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 56:
-#line 1333 "parse.y"
-    {
-		    /*%%%*/
-			block_dup_check((yyvsp[(4) - (5)].node),(yyvsp[(5) - (5)].node));
-		        GC_WB(&(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 57:
-#line 1345 "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_intern("::"), $3, $4);
-		    %*/
-		    ;}
-    break;
-
-  case 58:
-#line 1354 "parse.y"
-    {
-		    /*%%%*/
-			block_dup_check((yyvsp[(4) - (5)].node),(yyvsp[(5) - (5)].node));
-		        GC_WB(&(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_intern("::"), $3, $4);
-			$$ = method_add_block($$, $5);
-		    %*/
-		   ;}
-    break;
-
-  case 59:
-#line 1366 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = NEW_SUPER((yyvsp[(2) - (2)].node));
-			fixpos((yyval.node), (yyvsp[(2) - (2)].node));
-		    /*%
-			$$ = dispatch1(super, $2);
-		    %*/
-		    ;}
-    break;
-
-  case 60:
-#line 1375 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = new_yield((yyvsp[(2) - (2)].node));
-			fixpos((yyval.node), (yyvsp[(2) - (2)].node));
-		    /*%
-			$$ = dispatch1(yield, $2);
-		    %*/
-		    ;}
-    break;
-
-  case 62:
-#line 1387 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = (yyvsp[(2) - (3)].node);
-		    /*%
-			$$ = dispatch1(mlhs_paren, $2);
-		    %*/
-		    ;}
-    break;
-
-  case 64:
-#line 1398 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = NEW_MASGN(NEW_LIST((yyvsp[(2) - (3)].node)), 0);
-		    /*%
-			$$ = dispatch1(mlhs_paren, $2);
-		    %*/
-		    ;}
-    break;
-
-  case 65:
-#line 1408 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = NEW_MASGN((yyvsp[(1) - (1)].node), 0);
-		    /*%
-			$$ = $1;
-		    %*/
-		    ;}
-    break;
-
-  case 66:
-#line 1416 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = NEW_MASGN(list_append((yyvsp[(1) - (2)].node),(yyvsp[(2) - (2)].node)), 0);
-		    /*%
-			$$ = mlhs_add($1, $2);
-		    %*/
-		    ;}
-    break;
-
-  case 67:
-#line 1424 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = NEW_MASGN((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
-		    /*%
-			$$ = mlhs_add_star($1, $3);
-		    %*/
-		    ;}
-    break;
-
-  case 68:
-#line 1432 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = NEW_MASGN((yyvsp[(1) - (5)].node), NEW_POSTARG((yyvsp[(3) - (5)].node),(yyvsp[(5) - (5)].node)));
-		    /*%
-			$$ = mlhs_add_star($1, $3);
-		    %*/
-		    ;}
-    break;
-
-  case 69:
-#line 1440 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = NEW_MASGN((yyvsp[(1) - (2)].node), -1);
-		    /*%
-			$$ = mlhs_add_star($1, Qnil);
-		    %*/
-		    ;}
-    break;
-
-  case 70:
-#line 1448 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = NEW_MASGN((yyvsp[(1) - (4)].node), NEW_POSTARG(-1, (yyvsp[(4) - (4)].node)));
-		    /*%
-			$$ = mlhs_add_star($1, Qnil);
-		    %*/
-		    ;}
-    break;
-
-  case 71:
-#line 1456 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = NEW_MASGN(0, (yyvsp[(2) - (2)].node));
-		    /*%
-			$$ = mlhs_add_star(mlhs_new(), $2);
-		    %*/
-		    ;}
-    break;
-
-  case 72:
-#line 1464 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = NEW_MASGN(0, NEW_POSTARG((yyvsp[(2) - (4)].node),(yyvsp[(4) - (4)].node)));
-		    /*%
-			$$ = mlhs_add_star(mlhs_new(), $2);
-		    %*/
-		    ;}
-    break;
-
-  case 73:
-#line 1472 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = NEW_MASGN(0, -1);
-		    /*%
-			$$ = mlhs_add_star(mlhs_new(), Qnil);
-		    %*/
-		    ;}
-    break;
-
-  case 74:
-#line 1480 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = NEW_MASGN(0, NEW_POSTARG(-1, (yyvsp[(3) - (3)].node)));
-		    /*%
-			$$ = mlhs_add_star(mlhs_new(), Qnil);
-		    %*/
-		    ;}
-    break;
-
-  case 76:
-#line 1491 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = (yyvsp[(2) - (3)].node);
-		    /*%
-			$$ = dispatch1(mlhs_paren, $2);
-		    %*/
-		    ;}
-    break;
-
-  case 77:
-#line 1501 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = NEW_LIST((yyvsp[(1) - (2)].node));
-		    /*%
-			$$ = mlhs_add(mlhs_new(), $1);
-		    %*/
-		    ;}
-    break;
-
-  case 78:
-#line 1509 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].node));
-		    /*%
-			$$ = mlhs_add($1, $2);
-		    %*/
-		    ;}
-    break;
-
-  case 79:
-#line 1519 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
-		    /*%
-			$$ = mlhs_add(mlhs_new(), $1);
-		    %*/
-		    ;}
-    break;
-
-  case 80:
-#line 1527 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
-		    /*%
-			$$ = mlhs_add($1, $3);
-		    %*/
-		    ;}
-    break;
-
-  case 81:
-#line 1537 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
-		    /*%
-			$$ = $1;
-		    %*/
-		    ;}
-    break;
-
-  case 82:
-#line 1545 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = aryset((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node));
-		    /*%
-			$$ = dispatch2(aref_field, $1, escape_Qundef($3));
-		    %*/
-		    ;}
-    break;
-
-  case 83:
-#line 1553 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
-		    /*%
-			$$ = dispatch3(field, $1, ripper_id2sym('.'), $3);
-		    %*/
-		    ;}
-    break;
-
-  case 84:
-#line 1561 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
-		    /*%
-			$$ = dispatch2(const_path_field, $1, $3);
-		    %*/
-		    ;}
-    break;
-
-  case 85:
-#line 1569 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
-		    /*%
-			$$ = dispatch3(field, $1, ripper_id2sym('.'), $3);
-		    %*/
-		    ;}
-    break;
-
-  case 86:
-#line 1577 "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)));
-		    /*%
-			if (in_def || in_single)
-			    yyerror("dynamic constant assignment");
-			$$ = dispatch2(const_path_field, $1, $3);
-		    %*/
-		    ;}
-    break;
-
-  case 87:
-#line 1589 "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);
-		    %*/
-		    ;}
-    break;
-
-  case 88:
-#line 1599 "parse.y"
-    {
-		    /*%%%*/
-			rb_backref_error((yyvsp[(1) - (1)].node));
-			(yyval.node) = NEW_BEGIN(0);
-		    /*%
-			$$ = dispatch1(var_field, $1);
-			$$ = dispatch1(assign_error, $$);
-		    %*/
-		    ;}
-    break;
-
-  case 89:
-#line 1611 "parse.y"
-    {
-		    /*%%%*/
-			if (!((yyval.node) = assignable((yyvsp[(1) - (1)].id), 0))) (yyval.node) = NEW_BEGIN(0);
-		    /*%
-			$$ = dispatch1(var_field, $1);
-		    %*/
-		    ;}
-    break;
-
-  case 90:
-#line 1619 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = aryset((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node));
-		    /*%
-			$$ = dispatch2(aref_field, $1, escape_Qundef($3));
-		    %*/
-		    ;}
-    break;
-
-  case 91:
-#line 1627 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
-		    /*%
-			$$ = dispatch3(field, $1, ripper_id2sym('.'), $3);
-		    %*/
-		    ;}
-    break;
-
-  case 92:
-#line 1635 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
-		    /*%
-			$$ = dispatch3(field, $1, ripper_intern("::"), $3);
-		    %*/
-		    ;}
-    break;
-
-  case 93:
-#line 1643 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
-		    /*%
-			$$ = dispatch3(field, $1, ripper_id2sym('.'), $3);
-		    %*/
-		    ;}
-    break;
-
-  case 94:
-#line 1651 "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, $$);
-			}
-		    %*/
-		    ;}
-    break;
-
-  case 95:
-#line 1664 "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, $$);
-			}
-		    %*/
-		    ;}
-    break;
-
-  case 96:
-#line 1677 "parse.y"
-    {
-		    /*%%%*/
-			rb_backref_error((yyvsp[(1) - (1)].node));
-			(yyval.node) = NEW_BEGIN(0);
-		    /*%
-			$$ = dispatch1(assign_error, $1);
-		    %*/
-		    ;}
-    break;
-
-  case 97:
-#line 1688 "parse.y"
-    {
-		    /*%%%*/
-			yyerror("class/module name must be CONSTANT");
-		    /*%
-			$$ = dispatch1(class_name_error, $1);
-		    %*/
-		    ;}
-    break;
-
-  case 99:
-#line 1699 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = NEW_COLON3((yyvsp[(2) - (2)].id));
-		    /*%
-			$$ = dispatch1(top_const_ref, $2);
-		    %*/
-		    ;}
-    break;
-
-  case 100:
-#line 1707 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = NEW_COLON2(0, (yyval.node));
-		    /*%
-			$$ = dispatch1(const_ref, $1);
-		    %*/
-		    ;}
-    break;
-
-  case 101:
-#line 1715 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
-		    /*%
-			$$ = dispatch2(const_path_ref, $1, $3);
-		    %*/
-		    ;}
-    break;
-
-  case 105:
-#line 1728 "parse.y"
-    {
-		    /*%%%*/
-			lex_state = EXPR_END;
-			(yyval.id) = (yyvsp[(1) - (1)].id);
-		    /*%
-			lex_state = EXPR_END;
-			$$ = $1;
-		    %*/
-		    ;}
-    break;
-
-  case 106:
-#line 1738 "parse.y"
-    {
-		    /*%%%*/
-			lex_state = EXPR_END;
-			(yyval.id) = (yyvsp[(1) - (1)].id);
-		    /*%
-			lex_state = EXPR_END;
-			$$ = $1;
-		    %*/
-		    ;}
-    break;
-
-  case 109:
-#line 1754 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = NEW_LIT(ID2SYM((yyvsp[(1) - (1)].id)));
-		    /*%
-			$$ = dispatch1(symbol_literal, $1);
-		    %*/
-		    ;}
-    break;
-
-  case 111:
-#line 1765 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = NEW_UNDEF((yyvsp[(1) - (1)].node));
-		    /*%
-			$$ = rb_ary_new3(1, $1);
-		    %*/
-		    ;}
-    break;
-
-  case 112:
-#line 1772 "parse.y"
-    {lex_state = EXPR_FNAME;;}
-    break;
-
-  case 113:
-#line 1773 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = block_append((yyvsp[(1) - (4)].node), NEW_UNDEF((yyvsp[(4) - (4)].node)));
-		    /*%
-			rb_ary_push($1, $4);
-		    %*/
-		    ;}
-    break;
-
-  case 114:
-#line 1782 "parse.y"
-    { ifndef_ripper((yyval.id) = '|'); ;}
-    break;
-
-  case 115:
-#line 1783 "parse.y"
-    { ifndef_ripper((yyval.id) = '^'); ;}
-    break;
-
-  case 116:
-#line 1784 "parse.y"
-    { ifndef_ripper((yyval.id) = '&'); ;}
-    break;
-
-  case 117:
-#line 1785 "parse.y"
-    { ifndef_ripper((yyval.id) = tCMP); ;}
-    break;
-
-  case 118:
-#line 1786 "parse.y"
-    { ifndef_ripper((yyval.id) = tEQ); ;}
-    break;
-
-  case 119:
-#line 1787 "parse.y"
-    { ifndef_ripper((yyval.id) = tEQQ); ;}
-    break;
-
-  case 120:
-#line 1788 "parse.y"
-    { ifndef_ripper((yyval.id) = tMATCH); ;}
-    break;
-
-  case 121:
-#line 1789 "parse.y"
-    { ifndef_ripper((yyval.id) = tNMATCH); ;}
-    break;
-
-  case 122:
-#line 1790 "parse.y"
-    { ifndef_ripper((yyval.id) = '>'); ;}
-    break;
-
-  case 123:
-#line 1791 "parse.y"
-    { ifndef_ripper((yyval.id) = tGEQ); ;}
-    break;
-
-  case 124:
-#line 1792 "parse.y"
-    { ifndef_ripper((yyval.id) = '<'); ;}
-    break;
-
-  case 125:
-#line 1793 "parse.y"
-    { ifndef_ripper((yyval.id) = tLEQ); ;}
-    break;
-
-  case 126:
-#line 1794 "parse.y"
-    { ifndef_ripper((yyval.id) = tNEQ); ;}
-    break;
-
-  case 127:
-#line 1795 "parse.y"
-    { ifndef_ripper((yyval.id) = tLSHFT); ;}
-    break;
-
-  case 128:
-#line 1796 "parse.y"
-    { ifndef_ripper((yyval.id) = tRSHFT); ;}
-    break;
-
-  case 129:
-#line 1797 "parse.y"
-    { ifndef_ripper((yyval.id) = '+'); ;}
-    break;
-
-  case 130:
-#line 1798 "parse.y"
-    { ifndef_ripper((yyval.id) = '-'); ;}
-    break;
-
-  case 131:
-#line 1799 "parse.y"
-    { ifndef_ripper((yyval.id) = '*'); ;}
-    break;
-
-  case 132:
-#line 1800 "parse.y"
-    { ifndef_ripper((yyval.id) = '*'); ;}
-    break;
-
-  case 133:
-#line 1801 "parse.y"
-    { ifndef_ripper((yyval.id) = '/'); ;}
-    break;
-
-  case 134:
-#line 1802 "parse.y"
-    { ifndef_ripper((yyval.id) = '%'); ;}
-    break;
-
-  case 135:
-#line 1803 "parse.y"
-    { ifndef_ripper((yyval.id) = tPOW); ;}
-    break;
-
-  case 136:
-#line 1804 "parse.y"
-    { ifndef_ripper((yyval.id) = '!'); ;}
-    break;
-
-  case 137:
-#line 1805 "parse.y"
-    { ifndef_ripper((yyval.id) = '~'); ;}
-    break;
-
-  case 138:
-#line 1806 "parse.y"
-    { ifndef_ripper((yyval.id) = tUPLUS); ;}
-    break;
-
-  case 139:
-#line 1807 "parse.y"
-    { ifndef_ripper((yyval.id) = tUMINUS); ;}
-    break;
-
-  case 140:
-#line 1808 "parse.y"
-    { ifndef_ripper((yyval.id) = tAREF); ;}
-    break;
-
-  case 141:
-#line 1809 "parse.y"
-    { ifndef_ripper((yyval.id) = tASET); ;}
-    break;
-
-  case 142:
-#line 1810 "parse.y"
-    { ifndef_ripper((yyval.id) = '`'); ;}
-    break;
-
-  case 184:
-#line 1828 "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 185:
-#line 1837 "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 186:
-#line 1847 "parse.y"
-    {
-		    /*%%%*/
-			value_expr((yyvsp[(3) - (3)].node));
-			if ((yyvsp[(1) - (3)].node)) {
-			    ID vid = (yyvsp[(1) - (3)].node)->nd_vid;
-			    if ((yyvsp[(2) - (3)].id) == tOROP) {
-				GC_WB(&(yyvsp[(1) - (3)].node)->nd_value, (yyvsp[(3) - (3)].node));
-				(yyval.node) = NEW_OP_ASGN_OR(gettable(vid), (yyvsp[(1) - (3)].node));
-				if (is_asgn_or_id(vid)) {
-				    (yyval.node)->nd_aid = vid;
-				}
-			    }
-			    else if ((yyvsp[(2) - (3)].id) == tANDOP) {
-				GC_WB(&(yyvsp[(1) - (3)].node)->nd_value, (yyvsp[(3) - (3)].node));
-				(yyval.node) = NEW_OP_ASGN_AND(gettable(vid), (yyvsp[(1) - (3)].node));
-			    }
-			    else {
-				(yyval.node) = (yyvsp[(1) - (3)].node);
-				GC_WB(&(yyval.node)->nd_value, NEW_CALL(gettable(vid), (yyvsp[(2) - (3)].id), NEW_LIST((yyvsp[(3) - (3)].node))));
-			    }
-			}
-			else {
-			    (yyval.node) = NEW_BEGIN(0);
-			}
-		    /*%
-			$$ = dispatch3(opassign, $1, $2, $3);
-		    %*/
-		    ;}
-    break;
-
-  case 187:
-#line 1876 "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);
-			if ((yyvsp[(1) - (5)].node)) {
-			    ID vid = (yyvsp[(1) - (5)].node)->nd_vid;
-			    if ((yyvsp[(2) - (5)].id) == tOROP) {
-				GC_WB(&(yyvsp[(1) - (5)].node)->nd_value, (yyvsp[(3) - (5)].node));
-				(yyval.node) = NEW_OP_ASGN_OR(gettable(vid), (yyvsp[(1) - (5)].node));
-				if (is_asgn_or_id(vid)) {
-				    (yyval.node)->nd_aid = vid;
-				}
-			    }
-			    else if ((yyvsp[(2) - (5)].id) == tANDOP) {
-				GC_WB(&(yyvsp[(1) - (5)].node)->nd_value, (yyvsp[(3) - (5)].node));
-				(yyval.node) = NEW_OP_ASGN_AND(gettable(vid), (yyvsp[(1) - (5)].node));
-			    }
-			    else {
-				(yyval.node) = (yyvsp[(1) - (5)].node);
-				GC_WB(&(yyval.node)->nd_value, NEW_CALL(gettable(vid), (yyvsp[(2) - (5)].id), NEW_LIST((yyvsp[(3) - (5)].node))));
-			    }
-			}
-			else {
-			    (yyval.node) = NEW_BEGIN(0);
-			}
-		    /*%
-			$3 = dispatch2(rescue_mod, $3, $5);
-			$$ = dispatch3(opassign, $1, $2, $3);
-		    %*/
-		    ;}
-    break;
-
-  case 188:
-#line 1907 "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[(6) - (6)].node), (yyvsp[(3) - (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 189:
-#line 1928 "parse.y"
-    {
-		    /*%%%*/
-			value_expr((yyvsp[(5) - (5)].node));
-			if ((yyvsp[(4) - (5)].id) == tOROP) {
-			    (yyvsp[(4) - (5)].id) = 0;
-			}
-			else if ((yyvsp[(4) - (5)].id) == tANDOP) {
-			    (yyvsp[(4) - (5)].id) = 1;
-			}
-			(yyval.node) = NEW_OP_ASGN2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
-			fixpos((yyval.node), (yyvsp[(1) - (5)].node));
-		    /*%
-			$1 = dispatch3(field, $1, ripper_id2sym('.'), $3);
-			$$ = dispatch3(opassign, $1, $4, $5);
-		    %*/
-		    ;}
-    break;
-
-  case 190:
-#line 1945 "parse.y"
-    {
-		    /*%%%*/
-			value_expr((yyvsp[(5) - (5)].node));
-			if ((yyvsp[(4) - (5)].id) == tOROP) {
-			    (yyvsp[(4) - (5)].id) = 0;
-			}
-			else if ((yyvsp[(4) - (5)].id) == tANDOP) {
-			    (yyvsp[(4) - (5)].id) = 1;
-			}
-			(yyval.node) = NEW_OP_ASGN2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
-			fixpos((yyval.node), (yyvsp[(1) - (5)].node));
-		    /*%
-			$1 = dispatch3(field, $1, ripper_id2sym('.'), $3);
-			$$ = dispatch3(opassign, $1, $4, $5);
-		    %*/
-		    ;}
-    break;
-
-  case 191:
-#line 1962 "parse.y"
-    {
-		    /*%%%*/
-			value_expr((yyvsp[(5) - (5)].node));
-			if ((yyvsp[(4) - (5)].id) == tOROP) {
-			    (yyvsp[(4) - (5)].id) = 0;
-			}
-			else if ((yyvsp[(4) - (5)].id) == tANDOP) {
-			    (yyvsp[(4) - (5)].id) = 1;
-			}
-			(yyval.node) = NEW_OP_ASGN2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
-			fixpos((yyval.node), (yyvsp[(1) - (5)].node));
-		    /*%
-			$1 = dispatch3(field, $1, ripper_intern("::"), $3);
-			$$ = dispatch3(opassign, $1, $4, $5);
-		    %*/
-		    ;}
-    break;
-
-  case 192:
-#line 1979 "parse.y"
-    {
-		    /*%%%*/
-			yyerror("constant re-assignment");
-			(yyval.node) = NEW_BEGIN(0);
-		    /*%
-			$$ = dispatch2(const_path_field, $1, $3);
-			$$ = dispatch3(opassign, $$, $4, $5);
-			$$ = dispatch1(assign_error, $$);
-		    %*/
-		    ;}
-    break;
-
-  case 193:
-#line 1990 "parse.y"
-    {
-		    /*%%%*/
-			yyerror("constant re-assignment");
-			(yyval.node) = NEW_BEGIN(0);
-		    /*%
-			$$ = dispatch1(top_const_field, $2);
-			$$ = dispatch3(opassign, $$, $3, $4);
-			$$ = dispatch1(assign_error, $$);
-		    %*/
-		    ;}
-    break;
-
-  case 194:
-#line 2001 "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, $$);
-		    %*/
-		    ;}
-    break;
-
-  case 195:
-#line 2012 "parse.y"
-    {
-		    /*%%%*/
-			value_expr((yyvsp[(1) - (3)].node));
-			value_expr((yyvsp[(3) - (3)].node));
-			if (nd_type((yyvsp[(1) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(1) - (3)].node)->nd_lit) &&
-			    nd_type((yyvsp[(3) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(3) - (3)].node)->nd_lit)) {
-			    GC_WB(&(yyvsp[(1) - (3)].node)->nd_lit, rb_range_new((yyvsp[(1) - (3)].node)->nd_lit, (yyvsp[(3) - (3)].node)->nd_lit, Qfalse));
-			    (yyval.node) = (yyvsp[(1) - (3)].node);
-			}
-			else {
-			    (yyval.node) = NEW_DOT2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
-			}
-		    /*%
-			$$ = dispatch2(dot2, $1, $3);
-		    %*/
-		    ;}
-    break;
-
-  case 196:
-#line 2029 "parse.y"
-    {
-		    /*%%%*/
-			value_expr((yyvsp[(1) - (3)].node));
-			value_expr((yyvsp[(3) - (3)].node));
-			if (nd_type((yyvsp[(1) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(1) - (3)].node)->nd_lit) &&
-			    nd_type((yyvsp[(3) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(3) - (3)].node)->nd_lit)) {
-			    GC_WB(&(yyvsp[(1) - (3)].node)->nd_lit, rb_range_new((yyvsp[(1) - (3)].node)->nd_lit, (yyvsp[(3) - (3)].node)->nd_lit, Qtrue));
-			    (yyval.node) = (yyvsp[(1) - (3)].node);
-			}
-			else {
-			    (yyval.node) = NEW_DOT3((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
-			}
-		    /*%
-			$$ = dispatch2(dot3, $1, $3);
-		    %*/
-		    ;}
-    break;
-
-  case 197:
-#line 2046 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '+', (yyvsp[(3) - (3)].node));
-		    /*%
-			$$ = dispatch3(binary, $1, ID2SYM('+'), $3);
-		    %*/
-		    ;}
-    break;
-
-  case 198:
-#line 2054 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '-', (yyvsp[(3) - (3)].node));
-		    /*%
-			$$ = dispatch3(binary, $1, ID2SYM('-'), $3);
-		    %*/
-		    ;}
-    break;
-
-  case 199:
-#line 2062 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '*', (yyvsp[(3) - (3)].node));
-		    /*%
-			$$ = dispatch3(binary, $1, ID2SYM('*'), $3);
-		    %*/
-		    ;}
-    break;
-
-  case 200:
-#line 2070 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '/', (yyvsp[(3) - (3)].node));
-		    /*%
-			$$ = dispatch3(binary, $1, ID2SYM('/'), $3);
-		    %*/
-		    ;}
-    break;
-
-  case 201:
-#line 2078 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '%', (yyvsp[(3) - (3)].node));
-		    /*%
-			$$ = dispatch3(binary, $1, ID2SYM('%'), $3);
-		    %*/
-		    ;}
-    break;
-
-  case 202:
-#line 2086 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tPOW, (yyvsp[(3) - (3)].node));
-		    /*%
-			$$ = dispatch3(binary, $1, ripper_intern("**"), $3);
-		    %*/
-		    ;}
-    break;
-
-  case 203:
-#line 2094 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = NEW_CALL(call_bin_op((yyvsp[(2) - (4)].node), tPOW, (yyvsp[(4) - (4)].node)), tUMINUS, 0);
-		    /*%
-			$$ = dispatch3(binary, $2, ripper_intern("**"), $4);
-			$$ = dispatch2(unary, ripper_intern("-@"), $$);
-		    %*/
-		    ;}
-    break;
-
-  case 204:
-#line 2103 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = NEW_CALL(call_bin_op((yyvsp[(2) - (4)].node), tPOW, (yyvsp[(4) - (4)].node)), tUMINUS, 0);
-		    /*%
-			$$ = dispatch3(binary, $2, ripper_intern("**"), $4);
-			$$ = dispatch2(unary, ripper_intern("-@"), $$);
-		    %*/
-		    ;}
-    break;
-
-  case 205:
-#line 2112 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = call_uni_op((yyvsp[(2) - (2)].node), tUPLUS);
-		    /*%
-			$$ = dispatch2(unary, ripper_intern("+@"), $2);
-		    %*/
-		    ;}
-    break;
-
-  case 206:
-#line 2120 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = call_uni_op((yyvsp[(2) - (2)].node), tUMINUS);
-		    /*%
-			$$ = dispatch2(unary, ripper_intern("-@"), $2);
-		    %*/
-		    ;}
-    break;
-
-  case 207:
-#line 2128 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '|', (yyvsp[(3) - (3)].node));
-		    /*%
-			$$ = dispatch3(binary, $1, ID2SYM('|'), $3);
-		    %*/
-		    ;}
-    break;
-
-  case 208:
-#line 2136 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '^', (yyvsp[(3) - (3)].node));
-		    /*%
-			$$ = dispatch3(binary, $1, ID2SYM('^'), $3);
-		    %*/
-		    ;}
-    break;
-
-  case 209:
-#line 2144 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '&', (yyvsp[(3) - (3)].node));
-		    /*%
-			$$ = dispatch3(binary, $1, ID2SYM('&'), $3);
-		    %*/
-		    ;}
-    break;
-
-  case 210:
-#line 2152 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tCMP, (yyvsp[(3) - (3)].node));
-		    /*%
-			$$ = dispatch3(binary, $1, ripper_intern("<=>"), $3);
-		    %*/
-		    ;}
-    break;
-
-  case 211:
-#line 2160 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '>', (yyvsp[(3) - (3)].node));
-		    /*%
-			$$ = dispatch3(binary, $1, ID2SYM('>'), $3);
-		    %*/
-		    ;}
-    break;
-
-  case 212:
-#line 2168 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tGEQ, (yyvsp[(3) - (3)].node));
-		    /*%
-			$$ = dispatch3(binary, $1, ripper_intern(">="), $3);
-		    %*/
-		    ;}
-    break;
-
-  case 213:
-#line 2176 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '<', (yyvsp[(3) - (3)].node));
-		    /*%
-			$$ = dispatch3(binary, $1, ID2SYM('<'), $3);
-		    %*/
-		    ;}
-    break;
-
-  case 214:
-#line 2184 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tLEQ, (yyvsp[(3) - (3)].node));
-		    /*%
-			$$ = dispatch3(binary, $1, ripper_intern("<="), $3);
-		    %*/
-		    ;}
-    break;
-
-  case 215:
-#line 2192 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tEQ, (yyvsp[(3) - (3)].node));
-		    /*%
-			$$ = dispatch3(binary, $1, ripper_intern("=="), $3);
-		    %*/
-		    ;}
-    break;
-
-  case 216:
-#line 2200 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tEQQ, (yyvsp[(3) - (3)].node));
-		    /*%
-			$$ = dispatch3(binary, $1, ripper_intern("==="), $3);
-		    %*/
-		    ;}
-    break;
-
-  case 217:
-#line 2208 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tNEQ, (yyvsp[(3) - (3)].node));
-		    /*%
-			$$ = dispatch3(binary, $1, ripper_intern("!="), $3);
-		    %*/
-		    ;}
-    break;
-
-  case 218:
-#line 2216 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = match_op((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
-                        if (nd_type((yyvsp[(1) - (3)].node)) == NODE_LIT && TYPE((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, ripper_intern("=~"), $3);
-		    %*/
-		    ;}
-    break;
-
-  case 219:
-#line 2227 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tNMATCH, (yyvsp[(3) - (3)].node));
-		    /*%
-			$$ = dispatch3(binary, $1, ripper_intern("!~"), $3);
-		    %*/
-		    ;}
-    break;
-
-  case 220:
-#line 2235 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = call_uni_op(cond((yyvsp[(2) - (2)].node)), '!');
-		    /*%
-			$$ = dispatch2(unary, ID2SYM('!'), $2);
-		    %*/
-		    ;}
-    break;
-
-  case 221:
-#line 2243 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = call_uni_op((yyvsp[(2) - (2)].node), '~');
-		    /*%
-			$$ = dispatch2(unary, ID2SYM('~'), $2);
-		    %*/
-		    ;}
-    break;
-
-  case 222:
-#line 2251 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tLSHFT, (yyvsp[(3) - (3)].node));
-		    /*%
-			$$ = dispatch3(binary, $1, ripper_intern("<<"), $3);
-		    %*/
-		    ;}
-    break;
-
-  case 223:
-#line 2259 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tRSHFT, (yyvsp[(3) - (3)].node));
-		    /*%
-			$$ = dispatch3(binary, $1, ripper_intern(">>"), $3);
-		    %*/
-		    ;}
-    break;
-
-  case 224:
-#line 2267 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = logop(NODE_AND, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
-		    /*%
-			$$ = dispatch3(binary, $1, ripper_intern("&&"), $3);
-		    %*/
-		    ;}
-    break;
-
-  case 225:
-#line 2275 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = logop(NODE_OR, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
-		    /*%
-			$$ = dispatch3(binary, $1, ripper_intern("||"), $3);
-		    %*/
-		    ;}
-    break;
-
-  case 226:
-#line 2282 "parse.y"
-    {in_defined = 1;;}
-    break;
-
-  case 227:
-#line 2283 "parse.y"
-    {
-		    /*%%%*/
-			in_defined = 0;
-			(yyval.node) = NEW_DEFINED((yyvsp[(4) - (4)].node));
-		    /*%
-			in_defined = 0;
-			$$ = dispatch1(defined, $4);
-		    %*/
-		    ;}
-    break;
-
-  case 228:
-#line 2293 "parse.y"
-    {
-		    /*%%%*/
-			value_expr((yyvsp[(1) - (6)].node));
-			(yyval.node) = NEW_IF(cond((yyvsp[(1) - (6)].node)), (yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node));
-			fixpos((yyval.node), (yyvsp[(1) - (6)].node));
-		    /*%
-			$$ = dispatch3(ifop, $1, $3, $6);
-		    %*/
-		    ;}
-    break;
-
-  case 229:
-#line 2303 "parse.y"
-    {
-			(yyval.node) = (yyvsp[(1) - (1)].node);
-		    ;}
-    break;
-
-  case 230:
-#line 2309 "parse.y"
-    {
-		    /*%%%*/
-			value_expr((yyvsp[(1) - (1)].node));
-			(yyval.node) = (yyvsp[(1) - (1)].node);
-		        if (!(yyval.node)) (yyval.node) = NEW_NIL();
-		    /*%
-			$$ = $1;
-		    %*/
-		    ;}
-    break;
-
-  case 232:
-#line 2322 "parse.y"
-    {
-			(yyval.node) = (yyvsp[(1) - (2)].node);
-		    ;}
-    break;
-
-  case 233:
-#line 2326 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = arg_append((yyvsp[(1) - (4)].node), NEW_HASH((yyvsp[(3) - (4)].node)));
-		    /*%
-			$$ = arg_add_assocs($1, $3);
-		    %*/
-		    ;}
-    break;
-
-  case 234:
-#line 2334 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = NEW_LIST(NEW_HASH((yyvsp[(1) - (2)].node)));
-		    /*%
-			$$ = arg_add_assocs(arg_new(), $1);
-		    %*/
-		    ;}
-    break;
-
-  case 235:
-#line 2344 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = (yyvsp[(2) - (3)].node);
-		    /*%
-			$$ = dispatch1(arg_paren, escape_Qundef($2));
-		    %*/
-		    ;}
-    break;
-
-  case 240:
-#line 2362 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
-		    /*%
-			$$ = arg_add(arg_new(), $1);
-		    %*/
-		    ;}
-    break;
-
-  case 241:
-#line 2370 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = arg_blk_pass((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
-		    /*%
-			$$ = arg_add_optblock($1, $2);
-		    %*/
-		    ;}
-    break;
-
-  case 242:
-#line 2378 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = NEW_LIST(NEW_HASH((yyvsp[(1) - (2)].node)));
-			(yyval.node) = arg_blk_pass((yyval.node), (yyvsp[(2) - (2)].node));
-		    /*%
-			$$ = arg_add_assocs(arg_new(), $1);
-			$$ = arg_add_optblock($$, $2);
-		    %*/
-		    ;}
-    break;
-
-  case 243:
-#line 2388 "parse.y"
-    {
-		    /*%%%*/
-#if WITH_OBJC
-			if ((yyvsp[(1) - (4)].node)->nd_alen == 1) {
-			    NODE *n;
-			    unsigned all_symbol_pairs = 1;
-			    for (n = (yyvsp[(3) - (4)].node); n != NULL; 
-				 n = n->nd_next->nd_next) {
-				if (nd_type(n->nd_head) != NODE_LIT
-				    || TYPE(n->nd_head->nd_head) != T_SYMBOL) {
-				    all_symbol_pairs = 0;
-				    break;
-				}
-			    }
-			    if (all_symbol_pairs) {
-				(yyval.node) = arg_append((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node));
-				(yyvsp[(3) - (4)].node)->flags |= NODE_ARRAY_NAMED_ARGS;
-			    }
-			    else {
-				(yyval.node) = arg_append((yyvsp[(1) - (4)].node), NEW_HASH((yyvsp[(3) - (4)].node)));
-			    }
-			}
-			else
-#endif
-			    (yyval.node) = arg_append((yyvsp[(1) - (4)].node), NEW_HASH((yyvsp[(3) - (4)].node)));
-			(yyval.node) = arg_blk_pass((yyval.node), (yyvsp[(4) - (4)].node));
-		    /*%
-			$$ = arg_add_optblock(arg_add_assocs($1, $3), $4);
-		    %*/
-		    ;}
-    break;
-
-  case 245:
-#line 2428 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = arg_blk_pass(list_concat(NEW_LIST((yyvsp[(1) - (4)].node)),(yyvsp[(3) - (4)].node)), (yyvsp[(4) - (4)].node));
-		    /*%
-			$$ = arg_add_optblock(arg_prepend($3, $1), $4);
-		    %*/
-		    ;}
-    break;
-
-  case 246:
-#line 2436 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = arg_blk_pass(NEW_LIST((yyvsp[(1) - (3)].node)), (yyvsp[(3) - (3)].node));
-		    /*%
-			$$ = arg_add_block(arg_add(arg_new(), $1), $3);
-		    %*/
-		    ;}
-    break;
-
-  case 247:
-#line 2444 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = NEW_LIST(NEW_HASH((yyvsp[(1) - (2)].node)));
-			(yyval.node) = arg_blk_pass((yyval.node), (yyvsp[(2) - (2)].node));
-		    /*%
-			$$ = arg_add_assocs(arg_new(), $1);
-			$$ = arg_add_optblock($$, $2);
-		    %*/
-		    ;}
-    break;
-
-  case 248:
-#line 2454 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = arg_append(NEW_LIST((yyvsp[(1) - (4)].node)), NEW_HASH((yyvsp[(3) - (4)].node)));
-			(yyval.node) = arg_blk_pass((yyval.node), (yyvsp[(4) - (4)].node));
-		    /*%
-			$$ = arg_add_assocs(arg_add(arg_new(), $1), $3);
-			$$ = arg_add_optblock($$, $4);
-		    %*/
-		    ;}
-    break;
-
-  case 249:
-#line 2464 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = arg_append(list_concat(NEW_LIST((yyvsp[(1) - (6)].node)),(yyvsp[(3) - (6)].node)), NEW_HASH((yyvsp[(5) - (6)].node)));
-			(yyval.node) = arg_blk_pass((yyval.node), (yyvsp[(6) - (6)].node));
-		    /*%
-			$$ = arg_add_assocs(arg_prepend($3, $1), $5);
-			$$ = arg_add_optblock($$, $6);
-		    %*/
-		    ;}
-    break;
-
-  case 251:
-#line 2476 "parse.y"
-    {
-			(yyval.num) = cmdarg_stack;
-			CMDARG_PUSH(1);
-		    ;}
-    break;
-
-  case 252:
-#line 2481 "parse.y"
-    {
-			/* CMDARG_POP() */
-			cmdarg_stack = (yyvsp[(1) - (2)].num);
-			(yyval.node) = (yyvsp[(2) - (2)].node);
-		    ;}
-    break;
-
-  case 254:
-#line 2489 "parse.y"
-    {lex_state = EXPR_ENDARG;;}
-    break;
-
-  case 255:
-#line 2490 "parse.y"
-    {
-		    /*%%%*/
-			rb_warning0("don't put space before argument parentheses");
-			(yyval.node) = 0;
-		    /*%
-			$$ = dispatch1(space, dispatch1(arg_paren, arg_new()));
-		    %*/
-		    ;}
-    break;
-
-  case 256:
-#line 2498 "parse.y"
-    {lex_state = EXPR_ENDARG;;}
-    break;
-
-  case 257:
-#line 2499 "parse.y"
-    {
-		    /*%%%*/
-			rb_warning0("don't put space before argument parentheses");
-			(yyval.node) = (yyvsp[(2) - (4)].node);
-		    /*%
-			$$ = dispatch1(space, dispatch1(arg_paren, $2));
-		    %*/
-		    ;}
-    break;
-
-  case 258:
-#line 2510 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = NEW_BLOCK_PASS((yyvsp[(2) - (2)].node));
-		    /*%
-			$$ = $2;
-		    %*/
-		    ;}
-    break;
-
-  case 259:
-#line 2520 "parse.y"
-    {
-			(yyval.node) = (yyvsp[(2) - (2)].node);
-		    ;}
-    break;
-
-  case 260:
-#line 2524 "parse.y"
-    {
-			(yyval.node) = 0;
-		    ;}
-    break;
-
-  case 261:
-#line 2530 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
-		    /*%
-			$$ = arg_add(arg_new(), $1);
-		    %*/
-		    ;}
-    break;
-
-  case 262:
-#line 2538 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = NEW_SPLAT((yyvsp[(2) - (2)].node));
-		    /*%
-			$$ = arg_add_star(arg_new(), $2);
-		    %*/
-		    ;}
-    break;
-
-  case 263:
-#line 2546 "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 264:
-#line 2560 "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 265:
-#line 2577 "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 266:
-#line 2591 "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 267:
-#line 2606 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = NEW_SPLAT((yyvsp[(2) - (2)].node));
-		    /*%
-			$$ = mrhs_add_star(mrhs_new(), $2);
-		    %*/
-		    ;}
-    break;
-
-  case 276:
-#line 2624 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = NEW_FCALL((yyvsp[(1) - (1)].id), 0);
-		    /*%
-			$$ = method_arg(dispatch1(fcall, $1), arg_new());
-		    %*/
-		    ;}
-    break;
-
-  case 277:
-#line 2632 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.num) = ruby_sourceline;
-		    /*%
-		    %*/
-		    ;}
-    break;
-
-  case 278:
-#line 2640 "parse.y"
-    {
-		    /*%%%*/
-			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 279:
-#line 2656 "parse.y"
-    {lex_state = EXPR_ENDARG;;}
-    break;
-
-  case 280:
-#line 2657 "parse.y"
-    {
-			rb_warning0("(...) interpreted as grouped expression");
-		    /*%%%*/
-			(yyval.node) = (yyvsp[(2) - (4)].node);
-		    /*%
-			$$ = dispatch1(paren, $2);
-		    %*/
-		    ;}
-    break;
-
-  case 281:
-#line 2666 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = (yyvsp[(2) - (3)].node);
-		    /*%
-			$$ = dispatch1(paren, $2);
-		    %*/
-		    ;}
-    break;
-
-  case 282:
-#line 2674 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
-		    /*%
-			$$ = dispatch2(const_path_ref, $1, $3);
-		    %*/
-		    ;}
-    break;
-
-  case 283:
-#line 2682 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = NEW_COLON3((yyvsp[(2) - (2)].id));
-		    /*%
-			$$ = dispatch1(top_const_ref, $2);
-		    %*/
-		    ;}
-    break;
-
-  case 284:
-#line 2690 "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 285:
-#line 2703 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = NEW_HASH((yyvsp[(2) - (3)].node));
-		    /*%
-			$$ = dispatch1(hash, escape_Qundef($2));
-		    %*/
-		    ;}
-    break;
-
-  case 286:
-#line 2711 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = NEW_RETURN(0);
-		    /*%
-			$$ = dispatch0(return0);
-		    %*/
-		    ;}
-    break;
-
-  case 287:
-#line 2719 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = new_yield((yyvsp[(3) - (4)].node));
-		    /*%
-			$$ = dispatch1(yield, dispatch1(paren, $3));
-		    %*/
-		    ;}
-    break;
-
-  case 288:
-#line 2727 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = NEW_YIELD(0, Qfalse);
-		    /*%
-			$$ = dispatch1(yield, dispatch1(paren, arg_new()));
-		    %*/
-		    ;}
-    break;
-
-  case 289:
-#line 2735 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = NEW_YIELD(0, Qfalse);
-		    /*%
-			$$ = dispatch0(yield0);
-		    %*/
-		    ;}
-    break;
-
-  case 290:
-#line 2742 "parse.y"
-    {in_defined = 1;;}
-    break;
-
-  case 291:
-#line 2743 "parse.y"
-    {
-		    /*%%%*/
-			in_defined = 0;
-			(yyval.node) = NEW_DEFINED((yyvsp[(5) - (6)].node));
-		    /*%
-			in_defined = 0;
-			$$ = dispatch1(defined, $5);
-		    %*/
-		    ;}
-    break;
-
-  case 292:
-#line 2753 "parse.y"
-    {
-		    /*%%%*/
-			GC_WB(&(yyvsp[(2) - (2)].node)->nd_iter, NEW_FCALL((yyvsp[(1) - (2)].id), 0));
-			(yyval.node) = (yyvsp[(2) - (2)].node);
-			fixpos((yyvsp[(2) - (2)].node)->nd_iter, (yyvsp[(2) - (2)].node));
-		    /*%
-			$$ = method_arg(dispatch1(fcall, $1), arg_new());
-			$$ = method_add_block($$, $2);
-		    %*/
-		    ;}
-    break;
-
-  case 294:
-#line 2765 "parse.y"
-    {
-		    /*%%%*/
-			block_dup_check((yyvsp[(1) - (2)].node)->nd_args, (yyvsp[(2) - (2)].node));
-			GC_WB(&(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 295:
-#line 2776 "parse.y"
-    {
-			(yyval.node) = (yyvsp[(2) - (2)].node);
-		    ;}
-    break;
-
-  case 296:
-#line 2783 "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 297:
-#line 2795 "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 298:
-#line 2803 "parse.y"
-    {COND_PUSH(1);;}
-    break;
-
-  case 299:
-#line 2803 "parse.y"
-    {COND_POP();;}
-    break;
-
-  case 300:
-#line 2806 "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 301:
-#line 2814 "parse.y"
-    {COND_PUSH(1);;}
-    break;
-
-  case 302:
-#line 2814 "parse.y"
-    {COND_POP();;}
-    break;
-
-  case 303:
-#line 2817 "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 304:
-#line 2828 "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 305:
-#line 2837 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = NEW_CASE(0, (yyvsp[(3) - (4)].node));
-		    /*%
-			$$ = dispatch2(case, Qnil, $3);
-		    %*/
-		    ;}
-    break;
-
-  case 306:
-#line 2845 "parse.y"
-    {COND_PUSH(1);;}
-    break;
-
-  case 307:
-#line 2847 "parse.y"
-    {COND_POP();;}
-    break;
-
-  case 308:
-#line 2850 "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 = rb_intern("__i__"); //internal_id();
-			NODE *m = NEW_ARGS_AUX(0, 0);
-			NODE *args, *scope;
-
-#if 0
-			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)));
-			    GC_WB(&m->nd_next, block_append(
-				NEW_IF(
-				    NEW_NODE(NODE_AND,
-					     NEW_CALL(NEW_CALL(NEW_DVAR(id), rb_intern("length"), 0),
-						      rb_intern("=="), one),
-					     NEW_CALL(NEW_CALL(NEW_DVAR(id), rb_intern("[]"), zero),
-						      rb_intern("kind_of?"), NEW_LIST(NEW_LIT(rb_cArray))),
-					     0),
-					NEW_DASGN_CURR(id,
-						       NEW_CALL(NEW_DVAR(id), rb_intern("[]"), zero)),
-					0),
-				node_assign((yyvsp[(2) - (9)].node), NEW_DVAR(id))));
-			}
-			else {
-			    GC_WB(&m->nd_next, node_assign(NEW_MASGN(NEW_LIST((yyvsp[(2) - (9)].node)), 0), NEW_DVAR(id)));
-			}
-#endif
-
-			// TODO this doesn't work in multiple iterator variables are
-			// passed to 'for'.
-
-			args = new_args(m, 0, id, 0, 0);
-			args->nd_alen = 1;
-
-			NODE *block = (yyvsp[(8) - (9)].node);
-			if (nd_type(block) != NODE_BLOCK) {
-			    block = NEW_BLOCK(block);
-			}
-			NODE *new_block = NEW_BLOCK(NEW_DASGN((yyvsp[(2) - (9)].node)->nd_vid, NEW_DVAR(id)));
-			GC_WB(&new_block->nd_next, block);
-			(yyvsp[(8) - (9)].node) = new_block;
-
-			int cnt = vtable_size(lvtbl->args) + 1 + vtable_size(lvtbl->vars);
-			ID *tbl = ALLOC_N(ID, cnt + 2);
-			tbl[0] = vtable_size(lvtbl->args) + 1;
-			tbl[1] = id;
-			vtable_tblcpy(tbl+2, lvtbl->args);
-			tbl[vtable_size(lvtbl->args) + 2] = vtable_size(lvtbl->vars);
-			vtable_tblcpy(tbl+vtable_size(lvtbl->args)+3, lvtbl->vars);
-
-			scope = NEW_NODE(NODE_SCOPE, tbl, (yyvsp[(8) - (9)].node), args);
-			(yyval.node) = NEW_FOR(0, (yyvsp[(5) - (9)].node), scope);
-			fixpos((yyval.node), (yyvsp[(2) - (9)].node));
-		    /*%
-			$$ = dispatch3(for, $2, $5, $8);
-		    %*/
-		    ;}
-    break;
-
-  case 309:
-#line 2921 "parse.y"
-    {
-			if (in_def || in_single)
-			    yyerror("class definition in method body");
-		    /*%%%*/
-			local_push(0);
-			(yyval.num) = ruby_sourceline;
-		    /*%
-		    %*/
-		    ;}
-    break;
-
-  case 310:
-#line 2932 "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));
-			local_pop();
-		    /*%
-			$$ = dispatch3(class, $2, $3, $5);
-		    %*/
-		    ;}
-    break;
-
-  case 311:
-#line 2942 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.num) = in_def;
-			in_def = 0;
-		    /*%
-			in_def = 0;
-		    %*/
-		    ;}
-    break;
-
-  case 312:
-#line 2951 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.num) = in_single;
-			in_single = 0;
-			local_push(0);
-		    /*%
-			$$ = in_single;
-			in_single = 0;
-		    %*/
-		    ;}
-    break;
-
-  case 313:
-#line 2963 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = NEW_SCLASS((yyvsp[(3) - (8)].node), (yyvsp[(7) - (8)].node));
-			fixpos((yyval.node), (yyvsp[(3) - (8)].node));
-			local_pop();
-			in_def = (yyvsp[(4) - (8)].num);
-			in_single = (yyvsp[(6) - (8)].num);
-		    /*%
-			$$ = dispatch2(sclass, $3, $7);
-			in_def = $<val>4;
-			in_single = $<val>6;
-		    %*/
-		    ;}
-    break;
-
-  case 314:
-#line 2977 "parse.y"
-    {
-			if (in_def || in_single)
-			    yyerror("module definition in method body");
-		    /*%%%*/
-			local_push(0);
-			(yyval.num) = ruby_sourceline;
-		    /*%
-		    %*/
-		    ;}
-    break;
-
-  case 315:
-#line 2988 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = NEW_MODULE((yyvsp[(2) - (5)].node), (yyvsp[(4) - (5)].node));
-			nd_set_line((yyval.node), (yyvsp[(3) - (5)].num));
-			local_pop();
-		    /*%
-			$$ = dispatch2(module, $2, $4);
-		    %*/
-		    ;}
-    break;
-
-  case 316:
-#line 2998 "parse.y"
-    {
-			(yyval.id) = cur_mid;
-			cur_mid = (yyvsp[(2) - (2)].id);
-			in_def++;
-#if WITH_OBJC
-			in_def_named_args = 0;
-			named_arg((yyvsp[(2) - (2)].id), 1);
-#endif
-		    /*%%%*/
-			local_push(0);
-		    /*%
-		    %*/
-		    ;}
-    break;
-
-  case 317:
-#line 3014 "parse.y"
-    {
-		    /*%%%*/
-			NODE *body = remove_begin((yyvsp[(5) - (6)].node));
-			ID mid = (yyvsp[(2) - (6)].id);
-			reduce_nodes(&body);
-#if WITH_OBJC
-			if (in_def_named_args > 0)
-			    mid = rb_intern(named_mid);
-#endif
-			(yyval.node) = NEW_DEFN(mid, (yyvsp[(4) - (6)].node), body, NOEX_PRIVATE);
-			fixpos((yyval.node), (yyvsp[(4) - (6)].node));
-#if WITH_OBJC
-			if (in_def_named_args > 0
-			    && in_def_named_args 
-			       != (yyval.node)->nd_defn->nd_args->nd_frml - 1) {
-			    yyerror("invalid use of named arguments in " \
-				    "method definition");
-			}
-			in_def_named_args = 0;
-#endif
-			local_pop();
-			in_def--;
-			cur_mid = (yyvsp[(3) - (6)].id);
-		    /*%
-			$$ = dispatch3(def, $2, $4, $5);
-			in_def--;
-			cur_mid = $<id>3;
-		    %*/
-		    ;}
-    break;
-
-  case 318:
-#line 3043 "parse.y"
-    {lex_state = EXPR_FNAME;;}
-    break;
-
-  case 319:
-#line 3044 "parse.y"
-    {
-			in_single++;
-			lex_state = EXPR_END; /* force for args */
-#if WITH_OBJC
-			in_def_named_args = 0;
-			named_arg((yyvsp[(5) - (5)].id), 1);
-#endif
-		    /*%%%*/
-			local_push(0);
-		    /*%
-		    %*/
-		    ;}
-    break;
-
-  case 320:
-#line 3059 "parse.y"
-    {
-		    /*%%%*/
-			NODE *body = remove_begin((yyvsp[(8) - (9)].node));
-			ID mid = (yyvsp[(5) - (9)].id);
-			reduce_nodes(&body);
-#if WITH_OBJC
-			if (in_def_named_args > 0)
-			    mid = rb_intern(named_mid);
-#endif
-			(yyval.node) = NEW_DEFS((yyvsp[(2) - (9)].node), mid, (yyvsp[(7) - (9)].node), body);
-			fixpos((yyval.node), (yyvsp[(2) - (9)].node));
-#if WITH_OBJC
-			if (in_def_named_args > 0 
-			    && in_def_named_args 
-			       != (yyval.node)->nd_defn->nd_args->nd_frml - 1) {
-			    yyerror("invalid use of named arguments in " \
-				    "method definition");
-			}
-			in_def_named_args = 0;
-#endif
-			local_pop();
-			in_single--;
-		    /*%
-			$$ = dispatch5(defs, $2, $3, $5, $7, $8);
-			in_single--;
-		    %*/
-		    ;}
-    break;
-
-  case 321:
-#line 3087 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = NEW_BREAK(0);
-		    /*%
-			$$ = dispatch1(break, arg_new());
-		    %*/
-		    ;}
-    break;
-
-  case 322:
-#line 3095 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = NEW_NEXT(0);
-		    /*%
-			$$ = dispatch1(next, arg_new());
-		    %*/
-		    ;}
-    break;
-
-  case 323:
-#line 3103 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = NEW_REDO();
-		    /*%
-			$$ = dispatch0(redo);
-		    %*/
-		    ;}
-    break;
-
-  case 324:
-#line 3111 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = NEW_RETRY();
-		    /*%
-			$$ = dispatch0(retry);
-		    %*/
-		    ;}
-    break;
-
-  case 325:
-#line 3121 "parse.y"
-    {
-		    /*%%%*/
-			value_expr((yyvsp[(1) - (1)].node));
-			(yyval.node) = (yyvsp[(1) - (1)].node);
-		        if (!(yyval.node)) (yyval.node) = NEW_NIL();
-		    /*%
-			$$ = $1;
-		    %*/
-		    ;}
-    break;
-
-  case 332:
-#line 3157 "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 334:
-#line 3169 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = (yyvsp[(2) - (2)].node);
-		    /*%
-			$$ = dispatch1(else, $2);
-		    %*/
-		    ;}
-    break;
-
-  case 337:
-#line 3183 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
-		    /*%
-			$$ = dispatch1(mlhs_paren, $1);
-		    %*/
-		    ;}
-    break;
-
-  case 338:
-#line 3191 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = (yyvsp[(2) - (3)].node);
-		    /*%
-			$$ = dispatch1(mlhs_paren, $2);
-		    %*/
-		    ;}
-    break;
-
-  case 339:
-#line 3201 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
-		    /*%
-			$$ = mlhs_add(mlhs_new(), $1);
-		    %*/
-		    ;}
-    break;
-
-  case 340:
-#line 3209 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
-		    /*%
-			$$ = mlhs_add($1, $3);
-		    %*/
-		    ;}
-    break;
-
-  case 341:
-#line 3219 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = NEW_MASGN((yyvsp[(1) - (1)].node), 0);
-		    /*%
-			$$ = $1;
-		    %*/
-		    ;}
-    break;
-
-  case 342:
-#line 3227 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = NEW_MASGN((yyvsp[(1) - (4)].node), assignable((yyvsp[(4) - (4)].id), 0));
-		    /*%
-			$$ = mlhs_add_star($1, $4);
-		    %*/
-		    ;}
-    break;
-
-  case 343:
-#line 3235 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = NEW_MASGN((yyvsp[(1) - (6)].node), NEW_POSTARG(assignable((yyvsp[(4) - (6)].id), 0), (yyvsp[(6) - (6)].node)));
-		    /*%
-			$$ = mlhs_add_star($1, $4);
-		    %*/
-		    ;}
-    break;
-
-  case 344:
-#line 3243 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = NEW_MASGN((yyvsp[(1) - (3)].node), -1);
-		    /*%
-			$$ = mlhs_add_star($1, Qnil);
-		    %*/
-		    ;}
-    break;
-
-  case 345:
-#line 3251 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = NEW_MASGN((yyvsp[(1) - (5)].node), NEW_POSTARG(-1, (yyvsp[(5) - (5)].node)));
-		    /*%
-			$$ = mlhs_add_star($1, $5);
-		    %*/
-		    ;}
-    break;
-
-  case 346:
-#line 3259 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = NEW_MASGN(0, assignable((yyvsp[(2) - (2)].id), 0));
-		    /*%
-			$$ = mlhs_add_star(mlhs_new(), $2);
-		    %*/
-		    ;}
-    break;
-
-  case 347:
-#line 3267 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = NEW_MASGN(0, NEW_POSTARG(assignable((yyvsp[(2) - (4)].id), 0), (yyvsp[(4) - (4)].node)));
-		    /*%
-		      #if 0
-		      TODO: Check me
-		      #endif
-			$$ = mlhs_add_star($2, $4);
-		    %*/
-		    ;}
-    break;
-
-  case 348:
-#line 3278 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = NEW_MASGN(0, -1);
-		    /*%
-			$$ = mlhs_add_star(mlhs_new(), Qnil);
-		    %*/
-		    ;}
-    break;
-
-  case 349:
-#line 3286 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = NEW_MASGN(0, NEW_POSTARG(-1, (yyvsp[(3) - (3)].node)));
-		    /*%
-			$$ = mlhs_add_star(mlhs_new(), Qnil);
-		    %*/
-		    ;}
-    break;
-
-  case 350:
-#line 3296 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = new_args((yyvsp[(1) - (4)].node), 0, (yyvsp[(3) - (4)].id), 0, (yyvsp[(4) - (4)].id));
-		    /*%
-			$$ = params_new($1, Qnil, $3, Qnil, escape_Qundef($4));
-		    %*/
-		    ;}
-    break;
-
-  case 351:
-#line 3304 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = new_args((yyvsp[(1) - (2)].node), 0, 1, 0, 0);
-		    /*%
-			$$ = params_new($1, Qnil, Qnil, Qnil, Qnil);
-                        dispatch1(excessed_comma, $$);
-		    %*/
-		    ;}
-    break;
-
-  case 352:
-#line 3313 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = new_args((yyvsp[(1) - (6)].node), 0, (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].id));
-		    /*%
-			$$ = params_new($1, Qnil, $3, $5, escape_Qundef($6));
-		    %*/
-		    ;}
-    break;
-
-  case 353:
-#line 3321 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = new_args((yyvsp[(1) - (2)].node), 0, 0, 0, (yyvsp[(2) - (2)].id));
-		    /*%
-			$$ = params_new($1, Qnil,Qnil, Qnil, escape_Qundef($2));
-		    %*/
-		    ;}
-    break;
-
-  case 354:
-#line 3329 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = new_args(0, 0, (yyvsp[(1) - (2)].id), 0, (yyvsp[(2) - (2)].id));
-		    /*%
-			$$ = params_new(Qnil, Qnil, $1, Qnil, escape_Qundef($2));
-		    %*/
-		    ;}
-    break;
-
-  case 355:
-#line 3337 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = new_args(0, 0, (yyvsp[(1) - (4)].id), (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].id));
-		    /*%
-			$$ = params_new(Qnil, Qnil, $1, $3, escape_Qundef($4));
-		    %*/
-		    ;}
-    break;
-
-  case 356:
-#line 3345 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = new_args(0, 0, 0, 0, (yyvsp[(1) - (1)].id));
-		    /*%
-			$$ = params_new(Qnil, Qnil, Qnil, Qnil, $1);
-		    %*/
-		    ;}
-    break;
-
-  case 358:
-#line 3356 "parse.y"
-    {
-			command_start = Qtrue;
-		    ;}
-    break;
-
-  case 359:
-#line 3362 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = 0;
-		    /*%
-			$$ = blockvar_new(params_new(Qnil,Qnil,Qnil,Qnil,Qnil),
-                                          escape_Qundef($2));
-		    %*/
-		    ;}
-    break;
-
-  case 360:
-#line 3371 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = 0;
-		    /*%
-			$$ = blockvar_new(params_new(Qnil,Qnil,Qnil,Qnil,Qnil),
-                                          Qnil);
-		    %*/
-		    ;}
-    break;
-
-  case 361:
-#line 3380 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = (yyvsp[(2) - (4)].node);
-		    /*%
-			$$ = blockvar_new(escape_Qundef($2), escape_Qundef($3));
-		    %*/
-		    ;}
-    break;
-
-  case 363:
-#line 3392 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = 0;
-		    /*%
-			$$ = $2;
-		    %*/
-		    ;}
-    break;
-
-  case 366:
-#line 3418 "parse.y"
-    {
-		    /*%%%*/
-			new_bv((yyvsp[(1) - (1)].id));
-		    /*%
-			$$ = $1;
-		    %*/
-		    ;}
-    break;
-
-  case 367:
-#line 3426 "parse.y"
-    {
-			(yyval.node) = 0;
-		    ;}
-    break;
-
-  case 368:
-#line 3431 "parse.y"
-    {
-		    /*%%%*/
-			dyna_push();
-			(yyval.num) = lpar_beg;
-			lpar_beg = ++paren_nest;
-		    /*%
-		    %*/
-		    ;}
-    break;
-
-  case 369:
-#line 3441 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = (yyvsp[(2) - (3)].node);
-			GC_WB(&(yyval.node)->nd_body, NEW_SCOPE((yyvsp[(2) - (3)].node)->nd_head, (yyvsp[(3) - (3)].node)));
-			dyna_pop();
-			lpar_beg = (yyvsp[(1) - (3)].num);
-		    /*%
-			$$ = dispatch2(lambda, $2, $3);
-		    %*/
-		    ;}
-    break;
-
-  case 370:
-#line 3454 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = NEW_LAMBDA((yyvsp[(2) - (4)].node));
-		    /*%
-			$$ = dispatch1(paren, $2);
-		    %*/
-		    ;}
-    break;
-
-  case 371:
-#line 3462 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = NEW_LAMBDA((yyvsp[(1) - (2)].node));
-		    /*%
-			$$ = $1;
-		    %*/
-		    ;}
-    break;
-
-  case 372:
-#line 3472 "parse.y"
-    {
-			(yyval.node) = (yyvsp[(2) - (3)].node);
-		    ;}
-    break;
-
-  case 373:
-#line 3476 "parse.y"
-    {
-			(yyval.node) = (yyvsp[(2) - (3)].node);
-		    ;}
-    break;
-
-  case 374:
-#line 3482 "parse.y"
-    {
-		    /*%%%*/
-			dyna_push();
-			(yyval.num) = ruby_sourceline;
-		    /*% %*/
-		    ;}
-    break;
-
-  case 375:
-#line 3491 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node));
-			nd_set_line((yyval.node), (yyvsp[(2) - (5)].num));
-			dyna_pop();
-		    /*%
-			$$ = dispatch2(do_block, escape_Qundef($3), $4);
-		    %*/
-		    ;}
-    break;
-
-  case 376:
-#line 3503 "parse.y"
-    {
-		    /*%%%*/
-			block_dup_check((yyvsp[(1) - (2)].node)->nd_args, (yyvsp[(2) - (2)].node));
-			GC_WB(&(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 377:
-#line 3514 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
-		    /*%
-			$$ = dispatch3(call, $1, ripper_id2sym('.'), $3);
-			$$ = method_optarg($$, $4);
-		    %*/
-		    ;}
-    break;
-
-  case 378:
-#line 3523 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
-		    /*%
-			$$ = dispatch3(call, $1, ripper_intern("::"), $3);
-			$$ = method_optarg($$, $4);
-		    %*/
-		    ;}
-    break;
-
-  case 379:
-#line 3534 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = NEW_FCALL((yyvsp[(1) - (2)].id), (yyvsp[(2) - (2)].node));
-			fixpos((yyval.node), (yyvsp[(2) - (2)].node));
-		    /*%
-			$$ = method_arg(dispatch1(fcall, $1), $2);
-		    %*/
-		    ;}
-    break;
-
-  case 380:
-#line 3543 "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));
-		    /*%
-			$$ = dispatch3(call, $1, ripper_id2sym('.'), $3);
-			$$ = method_optarg($$, $4);
-		    %*/
-		    ;}
-    break;
-
-  case 381:
-#line 3553 "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));
-		    /*%
-			$$ = dispatch3(call, $1, ripper_id2sym('.'), $3);
-			$$ = method_optarg($$, $4);
-		    %*/
-		    ;}
-    break;
-
-  case 382:
-#line 3563 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = NEW_CALL((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id), 0);
-		    /*%
-			$$ = dispatch3(call, $1, ripper_intern("::"), $3);
-		    %*/
-		    ;}
-    break;
-
-  case 383:
-#line 3571 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = NEW_CALL((yyvsp[(1) - (3)].node), rb_intern("call"), (yyvsp[(3) - (3)].node));
-			fixpos((yyval.node), (yyvsp[(1) - (3)].node));
-		    /*%
-			$$ = dispatch3(call, dispatch1(paren, $1),
-				       ripper_id2sym('.'), rb_intern("call"));
-			$$ = method_optarg($$, $3);
-		    %*/
-		    ;}
-    break;
-
-  case 384:
-#line 3582 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = NEW_CALL((yyvsp[(1) - (3)].node), rb_intern("call"), (yyvsp[(3) - (3)].node));
-			fixpos((yyval.node), (yyvsp[(1) - (3)].node));
-		    /*%
-			$$ = dispatch3(call, dispatch1(paren, $1),
-				       ripper_id2sym('.'), rb_intern("call"));
-			$$ = method_optarg($$, $3);
-		    %*/
-		    ;}
-    break;
-
-  case 385:
-#line 3593 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = NEW_SUPER((yyvsp[(2) - (2)].node));
-		    /*%
-			$$ = dispatch1(super, $2);
-		    %*/
-		    ;}
-    break;
-
-  case 386:
-#line 3601 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = NEW_ZSUPER();
-		    /*%
-			$$ = dispatch0(zsuper);
-		    %*/
-		    ;}
-    break;
-
-  case 387:
-#line 3609 "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 388:
-#line 3623 "parse.y"
-    {
-		    /*%%%*/
-			dyna_push();
-			(yyval.num) = ruby_sourceline;
-		    /*%
-                    %*/
-		    ;}
-    break;
-
-  case 389:
-#line 3632 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node));
-			nd_set_line((yyval.node), (yyvsp[(2) - (5)].num));
-			dyna_pop();
-		    /*%
-			$$ = dispatch2(brace_block, escape_Qundef($3), $4);
-		    %*/
-		    ;}
-    break;
-
-  case 390:
-#line 3642 "parse.y"
-    {
-		    /*%%%*/
-			dyna_push();
-			(yyval.num) = ruby_sourceline;
-		    /*%
-                    %*/
-		    ;}
-    break;
-
-  case 391:
-#line 3651 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node));
-			nd_set_line((yyval.node), (yyvsp[(2) - (5)].num));
-			dyna_pop();
-		    /*%
-			$$ = dispatch2(do_block, escape_Qundef($3), $4);
-		    %*/
-		    ;}
-    break;
-
-  case 392:
-#line 3665 "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 395:
-#line 3681 "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 397:
-#line 3701 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
-		    /*%
-			$$ = rb_ary_new3(1, $1);
-		    %*/
-		    ;}
-    break;
-
-  case 398:
-#line 3709 "parse.y"
-    {
-		    /*%%%*/
-			if (!((yyval.node) = splat_array((yyvsp[(1) - (1)].node)))) (yyval.node) = (yyvsp[(1) - (1)].node);
-		    /*%
-			$$ = $1;
-		    %*/
-		    ;}
-    break;
-
-  case 400:
-#line 3720 "parse.y"
-    {
-			(yyval.node) = (yyvsp[(2) - (2)].node);
-		    ;}
-    break;
-
-  case 402:
-#line 3727 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = (yyvsp[(2) - (2)].node);
-		    /*%
-			$$ = dispatch1(ensure, $2);
-		    %*/
-		    ;}
-    break;
-
-  case 405:
-#line 3739 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = NEW_LIT(ID2SYM((yyvsp[(1) - (1)].id)));
-		    /*%
-			$$ = dispatch1(symbol_literal, $1);
-		    %*/
-		    ;}
-    break;
-
-  case 407:
-#line 3750 "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 410:
-#line 3769 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
-		    /*%
-			$$ = dispatch2(string_concat, $1, $2);
-		    %*/
-		    ;}
-    break;
-
-  case 411:
-#line 3779 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = (yyvsp[(2) - (3)].node);
-		    /*%
-			$$ = dispatch1(string_literal, $2);
-		    %*/
-		    ;}
-    break;
-
-  case 412:
-#line 3789 "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, STR_NEW0(), 1, NEW_LIST(node));
-				break;
-			    }
-			}
-			(yyval.node) = node;
-		    /*%
-			$$ = dispatch1(xstring_literal, $2);
-		    %*/
-		    ;}
-    break;
-
-  case 413:
-#line 3816 "parse.y"
-    {
-		    /*%%%*/
-			int options = (yyvsp[(3) - (3)].num);
-			NODE *node = (yyvsp[(2) - (3)].node);
-                        NODE *list;
-			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);
-				GC_WB(&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;
-                            reg_fragment_check(node->nd_lit, options);
-                            for (list = node->nd_next; list; list = list->nd_next) {
-                                if (nd_type(list->nd_head) == NODE_STR) {
-                                    reg_fragment_check(list->nd_head->nd_lit, options);
-                                }
-                            }
-			    break;
-			}
-			(yyval.node) = node;
-		    /*%
-			$$ = dispatch2(regexp_literal, $2, $3);
-		    %*/
-		    ;}
-    break;
-
-  case 414:
-#line 3858 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = NEW_ZARRAY();
-		    /*%
-			$$ = dispatch0(words_new);
-		    %*/
-		    ;}
-    break;
-
-  case 415:
-#line 3866 "parse.y"
-    {
-			(yyval.node) = (yyvsp[(2) - (3)].node);
-		    ;}
-    break;
-
-  case 416:
-#line 3872 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = 0;
-		    /*%
-			$$ = dispatch0(words_new);
-		    %*/
-		    ;}
-    break;
-
-  case 417:
-#line 3880 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = list_append((yyvsp[(1) - (3)].node), evstr2dstr((yyvsp[(2) - (3)].node)));
-		    /*%
-			$$ = dispatch2(words_add, $1, $2);
-		    %*/
-		    ;}
-    break;
-
-  case 419:
-#line 3898 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
-		    /*%
-			$$ = dispatch2(word_add, $1, $2);
-		    %*/
-		    ;}
-    break;
-
-  case 420:
-#line 3908 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = NEW_ZARRAY();
-		    /*%
-			$$ = dispatch0(qwords_new);
-		    %*/
-		    ;}
-    break;
-
-  case 421:
-#line 3916 "parse.y"
-    {
-			(yyval.node) = (yyvsp[(2) - (3)].node);
-		    ;}
-    break;
-
-  case 422:
-#line 3922 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = 0;
-		    /*%
-			$$ = dispatch0(qwords_new);
-		    %*/
-		    ;}
-    break;
-
-  case 423:
-#line 3930 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].node));
-		    /*%
-			$$ = dispatch2(qwords_add, $1, $2);
-		    %*/
-		    ;}
-    break;
-
-  case 424:
-#line 3940 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = 0;
-		    /*%
-			$$ = dispatch0(string_content);
-		    %*/
-		    ;}
-    break;
-
-  case 425:
-#line 3948 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
-		    /*%
-			$$ = dispatch2(string_add, $1, $2);
-		    %*/
-		    ;}
-    break;
-
-  case 426:
-#line 3958 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = 0;
-		    /*%
-			$$ = dispatch0(xstring_new);
-		    %*/
-		    ;}
-    break;
-
-  case 427:
-#line 3966 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
-		    /*%
-			$$ = dispatch2(xstring_add, $1, $2);
-		    %*/
-		    ;}
-    break;
-
-  case 429:
-#line 3977 "parse.y"
-    {
-			(yyval.node) = lex_strterm;
-			lex_strterm = 0;
-			lex_state = EXPR_BEG;
-		    ;}
-    break;
-
-  case 430:
-#line 3983 "parse.y"
-    {
-		    /*%%%*/
-			lex_strterm = (yyvsp[(2) - (3)].node);
-			(yyval.node) = NEW_EVSTR((yyvsp[(3) - (3)].node));
-		    /*%
-			lex_strterm = $<node>2;
-			$$ = dispatch1(string_dvar, $3);
-		    %*/
-		    ;}
-    break;
-
-  case 431:
-#line 3993 "parse.y"
-    {
-			(yyval.node) = lex_strterm;
-			lex_strterm = 0;
-			lex_state = EXPR_BEG;
-			COND_PUSH(0);
-			CMDARG_PUSH(0);
-		    ;}
-    break;
-
-  case 432:
-#line 4001 "parse.y"
-    {
-			lex_strterm = (yyvsp[(2) - (4)].node);
-			COND_LEXPOP();
-			CMDARG_LEXPOP();
-		    /*%%%*/
-			if ((yyvsp[(3) - (4)].node)) (yyvsp[(3) - (4)].node)->flags &= ~NODE_FL_NEWLINE;
-			(yyval.node) = new_evstr((yyvsp[(3) - (4)].node));
-		    /*%
-			$$ = dispatch1(string_embexpr, $3);
-		    %*/
-		    ;}
-    break;
-
-  case 433:
-#line 4015 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = NEW_GVAR((yyvsp[(1) - (1)].id));
-		    /*%
-			$$ = dispatch1(var_ref, $1);
-		    %*/
-		    ;}
-    break;
-
-  case 434:
-#line 4023 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = NEW_IVAR((yyvsp[(1) - (1)].id));
-		    /*%
-			$$ = dispatch1(var_ref, $1);
-		    %*/
-		    ;}
-    break;
-
-  case 435:
-#line 4031 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = NEW_CVAR((yyvsp[(1) - (1)].id));
-		    /*%
-			$$ = dispatch1(var_ref, $1);
-		    %*/
-		    ;}
-    break;
-
-  case 437:
-#line 4042 "parse.y"
-    {
-		    /*%%%*/
-			lex_state = EXPR_ENDARG;
-			(yyval.id) = (yyvsp[(2) - (2)].id);
-		    /*%
-			lex_state = EXPR_ENDARG;
-			$$ = dispatch1(symbol, $2);
-		    %*/
-		    ;}
-    break;
-
-  case 442:
-#line 4060 "parse.y"
-    {
-		    /*%%%*/
-			lex_state = EXPR_ENDARG;
-			if (!((yyval.node) = (yyvsp[(2) - (3)].node))) {
-			    (yyval.node) = NEW_LIT(ID2SYM(rb_intern("")));
-			}
-			else {
-			    VALUE lit;
-
-			    switch (nd_type((yyval.node))) {
-			      case NODE_DSTR:
-				nd_set_type((yyval.node), NODE_DSYM);
-				break;
-			      case NODE_STR:
-				lit = (yyval.node)->nd_lit;
-				(yyval.node)->nd_lit = ID2SYM(rb_intern_str(lit));
-				nd_set_type((yyval.node), NODE_LIT);
-				break;
-			      default:
-				(yyval.node) = NEW_NODE(NODE_DSYM, STR_NEW0(), 1, NEW_LIST((yyval.node)));
-				break;
-			    }
-			}
-		    /*%
-			lex_state = EXPR_ENDARG;
-			$$ = dispatch1(dyna_symbol, $2);
-		    %*/
-		    ;}
-    break;
-
-  case 445:
-#line 4093 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = negate_lit((yyvsp[(2) - (2)].node));
-		    /*%
-			$$ = dispatch2(unary, ripper_intern("-@"), $2);
-		    %*/
-		    ;}
-    break;
-
-  case 446:
-#line 4101 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = negate_lit((yyvsp[(2) - (2)].node));
-		    /*%
-			$$ = dispatch2(unary, ripper_intern("-@"), $2);
-		    %*/
-		    ;}
-    break;
-
-  case 452:
-#line 4115 "parse.y"
-    {ifndef_ripper((yyval.id) = keyword_nil);;}
-    break;
-
-  case 453:
-#line 4116 "parse.y"
-    {ifndef_ripper((yyval.id) = keyword_self);;}
-    break;
-
-  case 454:
-#line 4117 "parse.y"
-    {ifndef_ripper((yyval.id) = keyword_true);;}
-    break;
-
-  case 455:
-#line 4118 "parse.y"
-    {ifndef_ripper((yyval.id) = keyword_false);;}
-    break;
-
-  case 456:
-#line 4119 "parse.y"
-    {ifndef_ripper((yyval.id) = keyword__FILE__);;}
-    break;
-
-  case 457:
-#line 4120 "parse.y"
-    {ifndef_ripper((yyval.id) = keyword__LINE__);;}
-    break;
-
-  case 458:
-#line 4121 "parse.y"
-    {ifndef_ripper((yyval.id) = keyword__ENCODING__);;}
-    break;
-
-  case 459:
-#line 4125 "parse.y"
-    {
-		    /*%%%*/
-			if (!((yyval.node) = gettable((yyvsp[(1) - (1)].id)))) (yyval.node) = NEW_BEGIN(0);
-		    /*%
-			$$ = dispatch1(var_ref, $1);
-		    %*/
-		    ;}
-    break;
-
-  case 460:
-#line 4135 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
-		    /*%
-			$$ = dispatch1(var_field, $1);
-		    %*/
-		    ;}
-    break;
-
-  case 463:
-#line 4149 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = 0;
-		    /*%
-			$$ = Qnil;
-		    %*/
-		    ;}
-    break;
-
-  case 464:
-#line 4157 "parse.y"
-    {
-			lex_state = EXPR_BEG;
-		    ;}
-    break;
-
-  case 465:
-#line 4161 "parse.y"
-    {
-			(yyval.node) = (yyvsp[(3) - (4)].node);
-		    ;}
-    break;
-
-  case 466:
-#line 4165 "parse.y"
-    {
-		    /*%%%*/
-			yyerrok;
-			(yyval.node) = 0;
-		    /*%
-			yyerrok;
-			$$ = Qnil;
-		    %*/
-		    ;}
-    break;
-
-  case 467:
-#line 4177 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = (yyvsp[(2) - (3)].node);
-			lex_state = EXPR_BEG;
-			command_start = Qtrue;
-		    /*%
-			$$ = dispatch1(paren, $2);
-			lex_state = EXPR_BEG;
-			command_start = Qtrue;
-		    %*/
-		    ;}
-    break;
-
-  case 468:
-#line 4189 "parse.y"
-    {
-			(yyval.node) = (yyvsp[(1) - (2)].node);
-		    ;}
-    break;
-
-  case 469:
-#line 4195 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), (yyvsp[(5) - (6)].id), 0, (yyvsp[(6) - (6)].id));
-		    /*%
-			$$ = params_new($1, $3, $5, Qnil, escape_Qundef($6));
-		    %*/
-		    ;}
-    break;
-
-  case 470:
-#line 4203 "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)].id));
-		    /*%
-			$$ = params_new($1, $3, $5, $7, escape_Qundef($8));
-		    %*/
-		    ;}
-    break;
-
-  case 471:
-#line 4211 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = new_args((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node), 0, 0, (yyvsp[(4) - (4)].id));
-		    /*%
-			$$ = params_new($1, $3, Qnil, Qnil, escape_Qundef($4));
-		    %*/
-		    ;}
-    break;
-
-  case 472:
-#line 4219 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), 0, (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].id));
-		    /*%
-			$$ = params_new($1, $3, Qnil, $5, escape_Qundef($6));
-		    %*/
-		    ;}
-    break;
-
-  case 473:
-#line 4227 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = new_args((yyvsp[(1) - (4)].node), 0, (yyvsp[(3) - (4)].id), 0, (yyvsp[(4) - (4)].id));
-		    /*%
-			$$ = params_new($1, Qnil, $3, Qnil, escape_Qundef($4));
-		    %*/
-		    ;}
-    break;
-
-  case 474:
-#line 4235 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = new_args((yyvsp[(1) - (6)].node), 0, (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].id));
-		    /*%
-			$$ = params_new($1, Qnil, $3, $5, escape_Qundef($6));
-		    %*/
-		    ;}
-    break;
-
-  case 475:
-#line 4243 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = new_args((yyvsp[(1) - (2)].node), 0, 0, 0, (yyvsp[(2) - (2)].id));
-		    /*%
-			$$ = params_new($1, Qnil, Qnil, Qnil,escape_Qundef($2));
-		    %*/
-		    ;}
-    break;
-
-  case 476:
-#line 4251 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = new_args(0, (yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), 0, (yyvsp[(4) - (4)].id));
-		    /*%
-			$$ = params_new(Qnil, $1, $3, Qnil, escape_Qundef($4));
-		    %*/
-		    ;}
-    break;
-
-  case 477:
-#line 4259 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = new_args(0, (yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].id));
-		    /*%
-			$$ = params_new(Qnil, $1, $3, $5, escape_Qundef($6));
-		    %*/
-		    ;}
-    break;
-
-  case 478:
-#line 4267 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = new_args(0, (yyvsp[(1) - (2)].node), 0, 0, (yyvsp[(2) - (2)].id));
-		    /*%
-			$$ = params_new(Qnil, $1, Qnil, Qnil,escape_Qundef($2));
-		    %*/
-		    ;}
-    break;
-
-  case 479:
-#line 4275 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = new_args(0, (yyvsp[(1) - (4)].node), 0, (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].id));
-		    /*%
-			$$ = params_new(Qnil, $1, Qnil, $3, escape_Qundef($4));
-		    %*/
-		    ;}
-    break;
-
-  case 480:
-#line 4283 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = new_args(0, 0, (yyvsp[(1) - (2)].id), 0, (yyvsp[(2) - (2)].id));
-		    /*%
-			$$ = params_new(Qnil, Qnil, $1, Qnil,escape_Qundef($2));
-		    %*/
-		    ;}
-    break;
-
-  case 481:
-#line 4291 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = new_args(0, 0, (yyvsp[(1) - (4)].id), (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].id));
-		    /*%
-			$$ = params_new(Qnil, Qnil, $1, $3, escape_Qundef($4));
-		    %*/
-		    ;}
-    break;
-
-  case 482:
-#line 4299 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = new_args(0, 0, 0, 0, (yyvsp[(1) - (1)].id));
-		    /*%
-			$$ = params_new(Qnil, Qnil, Qnil, Qnil, $1);
-		    %*/
-		    ;}
-    break;
-
-  case 483:
-#line 4307 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = new_args(0, 0, 0, 0, 0);
-		    /*%
-			$$ = params_new(Qnil, Qnil, Qnil, Qnil, Qnil);
-		    %*/
-		    ;}
-    break;
-
-  case 484:
-#line 4317 "parse.y"
-    {
-		    /*%%%*/
-			yyerror("formal argument cannot be a constant");
-			(yyval.id) = 0;
-		    /*%
-			$$ = dispatch1(param_error, $1);
-		    %*/
-		    ;}
-    break;
-
-  case 485:
-#line 4326 "parse.y"
-    {
-		    /*%%%*/
-			yyerror("formal argument cannot be an instance variable");
-			(yyval.id) = 0;
-		    /*%
-			$$ = dispatch1(param_error, $1);
-		    %*/
-		    ;}
-    break;
-
-  case 486:
-#line 4335 "parse.y"
-    {
-		    /*%%%*/
-			yyerror("formal argument cannot be a global variable");
-			(yyval.id) = 0;
-		    /*%
-			$$ = dispatch1(param_error, $1);
-		    %*/
-		    ;}
-    break;
-
-  case 487:
-#line 4344 "parse.y"
-    {
-		    /*%%%*/
-			yyerror("formal argument cannot be a class variable");
-			(yyval.id) = 0;
-		    /*%
-			$$ = dispatch1(param_error, $1);
-		    %*/
-		    ;}
-    break;
-
-  case 489:
-#line 4356 "parse.y"
-    {
-		    /*%%%*/
-			if (!is_local_id((yyvsp[(1) - (1)].id)))
-			    yyerror("formal argument must be local variable");
-			shadowing_lvar((yyvsp[(1) - (1)].id));
-		    /*%
-		    %*/
-			(yyval.id) = (yyvsp[(1) - (1)].id);
-		    ;}
-    break;
-
-  case 490:
-#line 4366 "parse.y"
-    {
-#if WITH_OBJC
-			named_arg((yyvsp[(1) - (3)].id), 0);
-#endif
-			(yyval.id) = (yyvsp[(3) - (3)].id);
-                    ;}
-    break;
-
-  case 491:
-#line 4373 "parse.y"
-    {
-#if WITH_OBJC
-			named_arg((yyvsp[(1) - (2)].id), 0);
-#endif
-			(yyval.id) = (yyvsp[(2) - (2)].id);
-                    ;}
-    break;
-
-  case 492:
-#line 4382 "parse.y"
-    {
-		    /*%%%*/
-			arg_var((yyvsp[(1) - (1)].id));
-			(yyval.node) = NEW_ARGS_AUX((yyvsp[(1) - (1)].id), 1);
-		    /*%
-		    %*/
-		    ;}
-    break;
-
-  case 493:
-#line 4390 "parse.y"
-    {
-		    /*%%%*/
-			ID tid = internal_id();
-			arg_var(tid);
-			if (dyna_in_block()) {
-			    GC_WB(&(yyvsp[(2) - (3)].node)->nd_value, NEW_DVAR(tid));
-			}
-			else {
-			    GC_WB(&(yyvsp[(2) - (3)].node)->nd_value, NEW_LVAR(tid));
-			}
-			(yyval.node) = NEW_ARGS_AUX(tid, 1);
-			GC_WB(&(yyval.node)->nd_next, (yyvsp[(2) - (3)].node));
-		    /*%
-			$$ = dispatch1(mlhs_paren, $2);
-		    %*/
-		    ;}
-    break;
-
-  case 495:
-#line 4416 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = (yyvsp[(1) - (3)].node);
-			(yyval.node)->nd_plen++;
-			GC_WB(&(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 496:
-#line 4429 "parse.y"
-    {
-		    /*%%%*/
-			if (!is_local_id((yyvsp[(1) - (3)].id)))
-			    yyerror("formal argument must be local variable");
-			shadowing_lvar((yyvsp[(1) - (3)].id));
-			arg_var((yyvsp[(1) - (3)].id));
-			(yyval.node) = NEW_OPT_ARG(0, assignable((yyvsp[(1) - (3)].id), (yyvsp[(3) - (3)].node)));
-		    /*%
-			$$ = rb_assoc_new($1, $3);
-		    %*/
-		    ;}
-    break;
-
-  case 497:
-#line 4443 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = (yyvsp[(1) - (1)].node);
-		    /*%
-			$$ = rb_ary_new3(1, $1);
-		    %*/
-		    ;}
-    break;
-
-  case 498:
-#line 4451 "parse.y"
-    {
-		    /*%%%*/
-			NODE *opts = (yyvsp[(1) - (3)].node);
-
-			while (opts->nd_next) {
-			    opts = opts->nd_next;
-			}
-			GC_WB(&opts->nd_next, (yyvsp[(3) - (3)].node));
-			(yyval.node) = (yyvsp[(1) - (3)].node);
-		    /*%
-			$$ = rb_ary_push($1, $3);
-		    %*/
-		    ;}
-    break;
-
-  case 501:
-#line 4471 "parse.y"
-    {
-		    /*%%%*/
-			if (!is_local_id((yyvsp[(2) - (2)].id)))
-			    yyerror("rest argument must be local variable");
-			shadowing_lvar((yyvsp[(2) - (2)].id));
-			arg_var((yyvsp[(2) - (2)].id));
-			(yyval.id) = (yyvsp[(2) - (2)].id);
-		    /*%
-			$$ = dispatch1(rest_param, $2);
-		    %*/
-		    ;}
-    break;
-
-  case 502:
-#line 4483 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.id) = internal_id();
-			arg_var((yyval.id));
-		    /*%
-			$$ = dispatch1(rest_param, Qnil);
-		    %*/
-		    ;}
-    break;
-
-  case 505:
-#line 4498 "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");
-			shadowing_lvar((yyvsp[(2) - (2)].id));
-			arg_var((yyvsp[(2) - (2)].id));
-			(yyval.id) = (yyvsp[(2) - (2)].id);
-		    /*%
-			$$ = dispatch1(blockarg, $2);
-		    %*/
-		    ;}
-    break;
-
-  case 506:
-#line 4514 "parse.y"
-    {
-			(yyval.id) = (yyvsp[(2) - (2)].id);
-		    ;}
-    break;
-
-  case 507:
-#line 4518 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.id) = 0;
-		    /*%
-			$$ = Qundef;
-		    %*/
-		    ;}
-    break;
-
-  case 508:
-#line 4528 "parse.y"
-    {
-		    /*%%%*/
-			value_expr((yyvsp[(1) - (1)].node));
-			(yyval.node) = (yyvsp[(1) - (1)].node);
-		        if (!(yyval.node)) (yyval.node) = NEW_NIL();
-		    /*%
-			$$ = $1;
-		    %*/
-		    ;}
-    break;
-
-  case 509:
-#line 4537 "parse.y"
-    {lex_state = EXPR_BEG;;}
-    break;
-
-  case 510:
-#line 4538 "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 512:
-#line 4568 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = (yyvsp[(1) - (2)].node);
-		    /*%
-			$$ = dispatch1(assoclist_from_args, $1);
-		    %*/
-		    ;}
-    break;
-
-  case 514:
-#line 4585 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = list_concat((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
-		    /*%
-			$$ = rb_ary_push($1, $3);
-		    %*/
-		    ;}
-    break;
-
-  case 515:
-#line 4595 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = list_append(NEW_LIST((yyvsp[(1) - (3)].node)), (yyvsp[(3) - (3)].node));
-		    /*%
-			$$ = dispatch2(assoc_new, $1, $3);
-		    %*/
-		    ;}
-    break;
-
-  case 516:
-#line 4603 "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 538:
-#line 4659 "parse.y"
-    {yyerrok;;}
-    break;
-
-  case 541:
-#line 4664 "parse.y"
-    {yyerrok;;}
-    break;
-
-  case 542:
-#line 4668 "parse.y"
-    {
-		    /*%%%*/
-			(yyval.node) = 0;
-		    /*%
-			$$ = Qundef;
-		    %*/
-		    ;}
-    break;
-
-
-/* Line 1267 of yacc.c.  */
-#line 9573 "y.tab.c"
-      default: break;
-    }
-  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:
-  /* If not already recovering from an error, report this error.  */
-  if (!yyerrstatus)
-    {
-      ++yynerrs;
-#if ! YYERROR_VERBOSE
-      yyerror (parser, YY_("syntax error"));
-#else
-      {
-	YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
-	if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
-	  {
-	    YYSIZE_T yyalloc = 2 * yysize;
-	    if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
-	      yyalloc = YYSTACK_ALLOC_MAXIMUM;
-	    if (yymsg != yymsgbuf)
-	      YYSTACK_FREE (yymsg);
-	    yymsg = (char *) YYSTACK_ALLOC (yyalloc);
-	    if (yymsg)
-	      yymsg_alloc = yyalloc;
-	    else
-	      {
-		yymsg = yymsgbuf;
-		yymsg_alloc = sizeof yymsgbuf;
-	      }
-	  }
-
-	if (0 < yysize && yysize <= yymsg_alloc)
-	  {
-	    (void) yysyntax_error (yymsg, yystate, yychar);
-	    yyerror (parser, yymsg);
-	  }
-	else
-	  {
-	    yyerror (parser, YY_("syntax error"));
-	    if (yysize != 0)
-	      goto yyexhaustedlab;
-	  }
-      }
-#endif
-    }
-
-
-
-  if (yyerrstatus == 3)
-    {
-      /* If just tried and failed to reuse look-ahead 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 look-ahead 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 (yyn != YYPACT_NINF)
-	{
-	  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);
-    }
-
-  if (yyn == YYFINAL)
-    YYACCEPT;
-
-  *++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;
-
-#ifndef yyoverflow
-/*-------------------------------------------------.
-| yyexhaustedlab -- memory exhaustion comes here.  |
-`-------------------------------------------------*/
-yyexhaustedlab:
-  yyerror (parser, YY_("memory exhausted"));
-  yyresult = 2;
-  /* Fall through.  */
-#endif
-
-yyreturn:
-  if (yychar != YYEOF && yychar != YYEMPTY)
-     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 4676 "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)
-
-#ifdef RIPPER
-/* FIXME */
-# define local_id(x)       1
-# define dyna_in_block()   1
-#endif /* RIPPER */
-
-#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_literal(x) yylval.node = NEW_LIT(x)
-# define set_yylval_node(x) yylval.node = x
-# define yylval_id() yylval.id
-#else
-# define set_yylval_str(x) (void)(x)
-# define set_yylval_num(x) (void)(x)
-# define set_yylval_id(x) (void)(x)
-# define set_yylval_literal(x) (void)(x)
-# define set_yylval_node(x) (void)(x)
-# define yylval_id() SYM2ID(yylval.val)
-#endif
-
-#ifdef RIPPER
-#define ripper_flush(p) (p->tokp = p->parser_lex_p)
-
-static void
-ripper_dispatch_scan_event(struct parser_params *parser, int t)
-{
-    VALUE str;
-
-    if (lex_p < parser->tokp) rb_raise(rb_eRuntimeError, "lex_p < tokp");
-    if (lex_p == parser->tokp) return;
-    str = STR_NEW(parser->tokp, lex_p - parser->tokp);
-    yylval.val = ripper_dispatch1(parser, ripper_token2eventid(t), str);
-    ripper_flush(parser);
-}
-
-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.val = 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
-
-#if !WITH_OBJC
-#define parser_mbclen()  mbclen((lex_p-1),lex_pend,parser->enc)
-#define parser_precise_mbclen()  rb_enc_precise_mbclen((lex_p-1),lex_pend,parser->enc)
-#endif
-#define is_identchar(p,e,enc) (rb_enc_isalnum(*p,enc) || (*p) == '_' || !ISASCII(*p))
-#define parser_is_identchar() (!parser->eofp && is_identchar((lex_p-1),lex_pend,parser->enc))
-
-#define parser_isascii() ISASCII(*(lex_p-1))
-
-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;
-    int len, 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) {
-#if WITH_OBJC
-		p = lex_p - max_line_margin;
-#else
-		p = rb_enc_prev_char(p, lex_p - max_line_margin, rb_enc_get(lex_lastline));
-#endif
-		pre = "...";
-	    }
-	    if (pe - lex_p > max_line_margin) {
-#if WITH_OBJC
-		pe = lex_p + max_line_margin;
-#else
-		pe = rb_enc_prev_char(lex_p, lex_p + max_line_margin, rb_enc_get(lex_lastline));
-#endif
-		post = "...";
-	    }
-	    len = pe - p;
-	}
-	buf = ALLOCA_N(char, len+2);
-	MEMCPY(buf, p, char, len);
-	buf[len] = '\0';
-	rb_compile_error_append("%s%s%s", pre, buf, post);
-
-	i = 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));
-#endif /* !RIPPER */
-    return 0;
-}
-
-static void parser_prepare(struct parser_params *parser);
-
-#ifndef RIPPER
-//VALUE ruby_suppress_tracing(VALUE (*func)(VALUE, int), VALUE arg, int always);
-
-static VALUE
-debug_lines(const char *f)
-{
-    if (rb_const_defined_at(rb_cObject, rb_intern("SCRIPT_LINES__"))) {
-	VALUE hash = rb_const_get_at(rb_cObject, rb_intern("SCRIPT_LINES__"));
-	if (TYPE(hash) == T_HASH) {
-	    VALUE fname = rb_str_new2(f);
-	    VALUE lines = rb_ary_new();
-	    rb_hash_aset(hash, fname, lines);
-	    return lines;
-	}
-    }
-    return 0;
-}
-
-static VALUE
-yycompile0(VALUE arg, int tracing)
-{
-    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);
-	if (ruby_debug_lines && ruby_sourceline > 0) {
-	    VALUE str = STR_NEW0();
-	    n = ruby_sourceline;
-	    do {
-		rb_ary_push(ruby_debug_lines, str);
-	    } while (--n);
-	}
-    }
-
-    parser_prepare(parser);
-    n = yyparse((void*)parser);
-    ruby_debug_lines = 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();
-    }
-    if (ruby_eval_tree_begin) {
-	NODE *scope = ruby_eval_tree;
-
-        if (scope) {
-	    GC_WB(&scope->nd_body, NEW_PRELUDE(ruby_eval_tree_begin, scope->nd_body));
-	}
-	tree = scope;
-    }
-    else {
-	tree = ruby_eval_tree;
-    }
-    return (VALUE)tree;
-}
-
-static NODE*
-yycompile(struct parser_params *parser, const char *f, int line)
-{
-    GC_WB(&ruby_sourcefile, ruby_strdup(f));
-    ruby_sourceline = line - 1;
-    return (NODE *)yycompile0((VALUE)parser, Qtrue);
-//    return (NODE *)ruby_suppress_tracing(yycompile0, (VALUE)parser, Qtrue);
-}
-#endif /* !RIPPER */
-
-static VALUE
-lex_get_str(struct parser_params *parser, VALUE s)
-{
-#if WITH_OBJC
-    long beg, len, n;
-    CFRange search_range;  
-    VALUE v;
- 
-    beg = 0; 
-    n = CFStringGetLength((CFStringRef)s);
-    if (lex_gets_ptr > 0) {
-	if (n == lex_gets_ptr)
-	    return Qnil;
-	beg += lex_gets_ptr;
-    }
-    if (CFStringFindCharacterFromSet((CFStringRef)s, 
-	CFCharacterSetGetPredefined(kCFCharacterSetNewline),
-	CFRangeMake(beg, n - beg),
-	0,
-	&search_range)) {
-	lex_gets_ptr = search_range.location + 1;
-	len = search_range.location - beg;
-    }
-    else {
-	lex_gets_ptr = n;
-	len = lex_gets_ptr - beg;	
-    }
-    v = (VALUE)CFStringCreateWithSubstring(NULL, (CFStringRef)s, 
-	CFRangeMake(beg, lex_gets_ptr - beg));
-    CFMakeCollectable((CFTypeRef)v);
-    return v;
-#else
-    const char *cptr, *beg, *end, *pend;
-    long clen;
-
-    cptr = beg = RSTRING_BYTEPTR(s);
-    clen = RSTRING_BYTELEN(s);
-    if (lex_gets_ptr) {
-	if (clen == lex_gets_ptr) return Qnil;
-	beg += lex_gets_ptr;
-    }
-    pend = cptr + clen;
-    end = beg;
-    while (end < pend) {
-	if (*end++ == '\n') break;
-    }
-    lex_gets_ptr = end - cptr;
-    return rb_enc_str_new(beg, end - beg, rb_enc_get(s));
-#endif
-}
-
-static VALUE
-lex_getline(struct parser_params *parser)
-{
-    VALUE line = (*parser->parser_lex_gets)(parser, parser->parser_lex_input);
-#ifndef RIPPER
-    if (ruby_debug_lines && !NIL_P(line)) {
-	rb_ary_push(ruby_debug_lines, line);
-    }
-#endif
-    return line;
-}
-
-#ifndef RIPPER
-NODE*
-rb_compile_string(const char *f, VALUE s, int line)
-{
-    VALUE volatile vparser = rb_parser_new();
-
-    return rb_parser_compile_string(vparser, f, s, line);
-}
-
-NODE*
-rb_parser_compile_string(volatile VALUE vparser, const char *f, VALUE s, int line)
-{
-    struct parser_params *parser;
-    NODE *node;
-    volatile VALUE tmp;
-
-    Data_Get_Struct(vparser, struct parser_params, parser);
-    lex_gets = lex_get_str;
-    lex_gets_ptr = 0;
-    lex_input = s;
-    lex_pbeg = lex_p = lex_pend = 0;
-    compile_for_eval = rb_parse_in_eval();
-
-    node = yycompile(parser, f, line);
-    tmp = vparser; /* prohibit tail call optimization */
-
-    return node;
-}
-
-NODE*
-rb_compile_cstr(const char *f, const char *s, int len, int line)
-{
-    return rb_compile_string(f, rb_str_new(s, len), line);
-}
-
-NODE*
-rb_parser_compile_cstr(volatile VALUE vparser, const char *f, const char *s, int len, int line)
-{
-    return rb_parser_compile_string(vparser, f, rb_str_new(s, len), 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)
-{
-    struct parser_params *parser;
-    volatile VALUE tmp;
-    NODE *node;
-
-    Data_Get_Struct(vparser, struct parser_params, parser);
-    lex_gets = lex_io_gets;
-    lex_input = file;
-    lex_pbeg = lex_p = lex_pend = 0;
-
-    node = yycompile(parser, f, start);
-    tmp = 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;
-
-#if WITH_OBJC
-    if (p[n] != '\0') {
-	/* Let's not create unnecessary bytestrings. */
-	long slen = strlen(p);
-	if (slen < n)
-	    n = slen;
-    }
-#endif
-
-    str = rb_enc_str_new(p, n, enc);
-#if !WITH_OBJC
-    if (!(func & STR_FUNC_REGEXP) && rb_enc_asciicompat(enc)) {
-	if (rb_enc_str_coderange(str) == ENC_CODERANGE_7BIT) {
-	    rb_enc_associate(str, rb_usascii_encoding());
-	}
-	else if (enc0 == rb_usascii_encoding() && enc != rb_utf8_encoding()) {
-	    rb_enc_associate(str, rb_ascii8bit_encoding());
-	}
-    }
-#endif
-
-    return str;
-}
-
-#define lex_goto_eol(parser) (parser->parser_lex_p = parser->parser_lex_pend)
-
-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_str_buf_cat(parser->delayed,
-				   parser->tokp, lex_pend - parser->tokp);
-		    parser->delayed_line = ruby_sourceline;
-		    parser->delayed_col = 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);
-#ifdef RIPPER
-	    ripper_flush(parser);
-#endif
-	    lex_lastline = v;
-	}
-    }
-    c = (unsigned char)*lex_p++;
-    if (c == '\r' && lex_p < lex_pend && *lex_p == '\n') {
-	lex_p++;
-	c = '\n';
-    }
-
-    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 peek(c) (lex_p != lex_pend && (c) == *lex_p)
-
-#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;
-    if (!tokenbuf) {
-	toksiz = 60;
-	GC_WB(&tokenbuf, ALLOC_N(char, 60));
-    }
-    if (toksiz > 4096) {
-	toksiz = 60;
-	REALLOC_N(tokenbuf, char, 60);
-	GC_WB(&tokenbuf, tokenbuf);
-    }
-    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);
-	GC_WB(&tokenbuf, tokenbuf);
-    }
-    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);
-	GC_WB(&tokenbuf, tokenbuf);
-    }
-}
-
-static int
-parser_tok_hex(struct parser_params *parser, int *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))
-
-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;
-    int 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(numlen);
-            }
-            else if (codepoint >= 0x80) {
-		*encp = UTF8_ENC();
-		if (string_literal) tokaddmbc(codepoint, *encp);
-	    }
-	    else if (string_literal) {
-		if (codepoint == 0 && symbol_literal) {
-		    yyerror("symbol cannot contain '\\u{0}'");
-		    return 0;
-		}
-
-		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 = UTF8_ENC();
-	    if (string_literal) tokaddmbc(codepoint, *encp);
-	}
-	else if (string_literal) {
-	    if (codepoint == 0 && symbol_literal) {
-		yyerror("symbol cannot contain '\\u0000'");
-		return 0;
-	    }
-
-	    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;
-    int 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':
-	if (flags & (ESCAPE_CONTROL|ESCAPE_META)) goto eof;
-	{
-	    int numlen;
-
-	    pushback(c);
-	    c = scan_oct(lex_p, 3, &numlen);
-	    lex_p += numlen;
-	}
-	return c;
-
-      case 'x':	/* hex constant */
-	if (flags & (ESCAPE_CONTROL|ESCAPE_META)) goto eof;
-	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()) == '\\') {
-	    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())== '\\') {
-	    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)
-{
-#if WITH_OBJC
-    /* FIXME */
-    char *buf = tokspace(1);
-    *(buf) = c;    
-#else
-    int len = rb_enc_codelen(c, enc);
-    rb_enc_mbcput(c, tokspace(len), enc);
-#endif
-}
-
-static int
-parser_tokadd_escape(struct parser_params *parser, rb_encoding **encp)
-{
-    int c;
-    int flags = 0;
-
-  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':
-	if (flags & (ESCAPE_CONTROL|ESCAPE_META)) goto eof;
-	{
-	    int numlen;
-	    int oct;
-
-	    oct = scan_oct(--lex_p, 3, &numlen);
-	    if (numlen == 0) goto eof;
-	    lex_p += numlen;
-	    tokcopy(numlen + 1);
-	}
-	return 0;
-
-      case 'x':	/* hex constant */
-	if (flags & (ESCAPE_CONTROL|ESCAPE_META)) goto eof;
-	{
-	    int numlen;
-	    int hex;
-
-	    hex = tok_hex(&numlen);
-	    if (numlen == 0) goto eof;
-	    tokcopy(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;
-}
-
-extern int rb_char_to_option_kcode(int c, int *option, int *kcode);
-
-static int
-parser_regx_options(struct parser_params *parser)
-{
-    int kcode = 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)) {
-            options |= opt;
-	    if (kc >= 0) kcode = c;
-        }
-        else {
-	    tokadd(c);
-        }
-    }
-    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)
-{
-    /* TODO: should use another API? */
-#if !WITH_OBJC
-    if (RBASIC(str)->flags & RSTRING_NOEMBED)
-	xfree(RSTRING_BYTEPTR(str));
-#endif
-    rb_gc_force_recycle(str);
-}
-
-static int
-parser_tokadd_mbchar(struct parser_params *parser, int c)
-{
-#if WITH_OBJC
-    int len = 1;
-#else
-    int len = parser_precise_mbclen();
-    if (!MBCLEN_CHARFOUND_P(len)) {
-	compile_error(PARSER_ARG "invalid multibyte char");
-	return -1;
-    }
-#endif
-    tokadd(c);
-    lex_p += --len;
-    if (len > 0) tokcopy(len);
-    return c;
-}
-
-#define tokadd_mbchar(c) parser_tokadd_mbchar(parser, c)
-
-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) {	\
-	int 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 (func & STR_FUNC_REGEXP) {
-		    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('\\');
-		}
-	    }
-	}
-	else if (!parser_isascii()) {
-	    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 && (func & STR_FUNC_SYMBOL)) {
-	    func &= ~STR_FUNC_SYMBOL;
-	    compile_error(PARSER_ARG "symbol cannot contain '\\0'");
-	    continue;
-	}
-        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)
-
-static int
-parser_parse_string(struct parser_params *parser, NODE *quote)
-{
-    int func = quote->nd_func;
-    int term = nd_term(quote);
-    int paren = nd_paren(quote);
-    int c, space = 0;
-    rb_encoding *enc = parser->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());
-	return tREGEXP_END;
-    }
-    if (space) {
-	pushback(c);
-	return ' ';
-    }
-    newtok();
-    if ((func & STR_FUNC_EXPAND) && c == '#') {
-	switch (c = nextc()) {
-	  case '$':
-	  case '@':
-	    pushback(c);
-	    return tSTRING_DVAR;
-	  case '{':
-	    return tSTRING_DBEG;
-	}
-	tokadd('#');
-    }
-    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));
-    return tSTRING_CONTENT;
-}
-
-static int
-parser_heredoc_identifier(struct parser_params *parser)
-{
-    int c = nextc(), term, func = 0, 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);
-#ifdef RIPPER
-    ripper_flush(parser);
-#endif
-    return term == '`' ? tXSTRING_BEG : tSTRING_BEG;
-}
-
-static void
-parser_heredoc_restore(struct parser_params *parser, NODE *here)
-{
-    VALUE line;
-
-#ifdef RIPPER
-    if (!NIL_P(parser->delayed))
-	ripper_dispatch_delayed_token(parser, tSTRING_CONTENT);
-    lex_goto_eol(parser);
-    ripper_dispatch_scan_event(parser, tHEREDOC_END);
-#endif
-    line = here->nd_orig;
-    lex_lastline = line;
-    lex_pbeg = RSTRING_BYTEPTR(line);
-    lex_pend = lex_pbeg + RSTRING_BYTELEN(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);
-#ifdef RIPPER
-    ripper_flush(parser);
-#endif
-}
-
-static int
-parser_whole_match_p(struct parser_params *parser,
-    const char *eos, int len, int indent)
-{
-    const char *p = lex_pbeg;
-    int n;
-
-    if (indent) {
-	while (*p && ISSPACE(*p)) p++;
-    }
-    n= lex_pend - (p + len);
-    if (n < 0 || (n > 0 && p[len] != '\n' && p[len] != '\r')) return Qfalse;
-    if (strncmp(eos, p, len) == 0) return Qtrue;
-    return Qfalse;
-}
-
-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;
-
-    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);
-      restore:
-	heredoc_restore(lex_strterm);
-	lex_strterm = 0;
-	return 0;
-    }
-    if (was_bol() && whole_match_p(eos, len, indent)) {
-	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);
-		goto error;
-	    }
-	} while (!whole_match_p(eos, len, indent));
-    }
-    else {
-	/*	int mb = ENC_CODERANGE_7BIT, *mbp = &mb;*/
-	rb_encoding *enc = parser->enc;
-	newtok();
-	if (c == '#') {
-	    switch (c = nextc()) {
-	      case '$':
-	      case '@':
-		pushback(c);
-		return tSTRING_DVAR;
-	      case '{':
-		return tSTRING_DBEG;
-	    }
-	    tokadd('#');
-	}
-	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));
-		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);
-    }
-    heredoc_restore(lex_strterm);
-    lex_strterm = NEW_STRTERM(-1, 0, 0);
-    set_yylval_str(str);
-    return tSTRING_CONTENT;
-}
-
-#include "lex.c"
-
-#ifndef RIPPER
-static void
-arg_ambiguous_gen(struct parser_params *parser)
-{
-    rb_warning0("ambiguous first argument; put parentheses or even spaces");
-}
-#else
-static void
-arg_ambiguous_gen(struct parser_params *parser)
-{
-    dispatch0(arg_ambiguous);
-}
-#endif
-#define arg_ambiguous() arg_ambiguous_gen(parser)
-
-static int
-lvar_defined_gen(struct parser_params *parser, ID id)
-{
-#ifndef RIPPER
-    return (dyna_in_block() && dvar_defined(id)) || local_id(id);
-#else
-    return 0;
-#endif
-}
-
-/* emacsen -*- hack */
-static int
-parser_encode_length(struct parser_params *parser, const char *name, int len)
-{
-    int 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 - 5] == '-') {
-	if (rb_memcicmp(name + nlen + 1, "dos", 3) == 0)
-	    return nlen;
-	if (rb_memcicmp(name + nlen + 1, "mac", 3) == 0)
-	    return nlen;
-    }
-    return len;
-}
-
-static void
-parser_set_encode(struct parser_params *parser, const char *name)
-{
-    rb_encoding *enc;
-#if WITH_OBJC
-    enc = rb_enc_find(name);
-    if (enc == NULL) {
-	rb_raise(rb_eArgError, "unknown encoding name: %s", name);
-    }
-    /* TODO should raise if the encoding is not ASCII compatible */
-#else
-    int idx = rb_enc_find_index(name);
-
-    if (idx < 0) {
-	rb_raise(rb_eArgError, "unknown encoding name: %s", name);
-    }
-    enc = rb_enc_from_index(idx);
-    if (!rb_enc_asciicompat(enc)) {
-	rb_raise(rb_eArgError, "%s is not ASCII compatible", rb_enc_name(enc));
-    }
-#endif
-    parser->enc = enc;
-}
-
-#ifndef RIPPER
-typedef int (*rb_magic_comment_length_t)(struct parser_params *parser, const char *name, int 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 (parser && parser->line_count != (parser->has_shebang ? 2 : 1))
-	return;
-    parser_set_encode(parser, val);
-}
-
-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},
-};
-#endif
-
-static const char *
-magic_comment_marker(const char *str, int len)
-{
-    int 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, int len)
-{
-    VALUE name = 0, val = 0;
-    const char *beg, *end, *vbeg, *vend;
-#if WITH_OBJC
-# define str_copy(_s, _p, _n) ((_s) \
-	? CFStringPad((CFMutableStringRef)_s, CFMakeCollectable(CFStringCreateWithCString(NULL, _p, kCFStringEncodingUTF8)), _n, 0) \
-	: ((_s) = STR_NEW((_p), (_n)))) 
-#else
-# define str_copy(_s, _p, _n) ((_s) \
-	? (rb_str_resize((_s), (_n)), \
-	   MEMCPY(RSTRING_BYTEPTR(_s), (_p), char, (_n)), (_s)) \
-	: ((_s) = STR_NEW((_p), (_n))))
-#endif
-
-    if (len <= 7) return Qfalse;
-    if (!(beg = magic_comment_marker(str, len))) return Qfalse;
-    if (!(end = magic_comment_marker(beg, str + len - beg))) return Qfalse;
-    str = beg;
-    len = end - beg - 3;
-
-    /* %r"([^\\s\'\":;]+)\\s*:\\s*(\"(?:\\\\.|[^\"])*\"|[^\"\\s;]+)[\\s;]*" */
-    while (len > 0) {
-#ifndef RIPPER
-	const struct magic_comment *p = magic_comments;
-#endif
-	int 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);
-#ifndef RIPPER
-	do {
-	    if (STRNCASECMP(p->name, RSTRING_PTR(name), n) == 0) {
-		n = vend - vbeg;
-		if (p->length) {
-		    n = (*p->length)(parser, vbeg, n);
-		}
-		str_copy(val, vbeg, n);
-		(*p->func)(parser, RSTRING_PTR(name), RSTRING_PTR(val));
-		break;
-	    }
-	} while (++p < magic_comments + sizeof(magic_comments) / sizeof(*p));
-#else
-	dispatch2(magic_comment, name, val);
-#endif
-    }
-
-    return Qtrue;
-}
-
-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_set_encode(parser, "UTF-8");
-	    lex_p += 2;
-	    lex_pbeg = lex_p;
-	    return;
-	}
-	break;
-      case EOF:
-	return;
-    }
-    pushback(c);
-    parser->enc = rb_enc_get(lex_lastline);
-    if (parser->enc == NULL)
-#if WITH_OBJC
-	parser->enc = rb_locale_encoding();
-#else
-	parser->enc = rb_utf8_encoding();
-#endif
-}
-
-#define IS_ARG() (lex_state == EXPR_ARG || lex_state == EXPR_CMDARG)
-#define IS_BEG() (lex_state == EXPR_BEG || lex_state == EXPR_MID || lex_state == EXPR_VALUE || lex_state == EXPR_CLASS)
-
-static int
-parser_yylex(struct parser_params *parser)
-{
-    register int c;
-    int space_seen = 0;
-    int cmd_state;
-    enum lex_state_e last_state;
-    rb_encoding *enc;
-#if !WITH_OBJC
-    int mb;
-#endif
-#ifdef RIPPER
-    int fallthru = Qfalse;
-#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_ENDARG;
-	    }
-	}
-	else {
-	    token = parse_string(lex_strterm);
-	    if (token == tSTRING_END || token == tREGEXP_END) {
-		rb_gc_force_recycle((VALUE)lex_strterm);
-		lex_strterm = 0;
-		lex_state = EXPR_ENDARG;
-	    }
-	}
-	return token;
-    }
-    cmd_state = command_start;
-    command_start = Qfalse;
-  retry:
-    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++;
-#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 */
-	if (!parser->has_shebang || parser->line_count != 1) {
-	    /* no magic_comment in shebang line */
-	    if (!parser_magic_comment(parser, lex_p, lex_pend - lex_p)) {
-		if (parser->line_count == (parser->has_shebang ? 2 : 1)) {
-		    set_file_encoding(parser, lex_p, lex_pend);
-		}
-	    }
-	}
-	lex_p = lex_pend;
-#ifdef RIPPER
-        ripper_dispatch_scan_event(parser, tCOMMENT);
-        fallthru = Qtrue;
-#endif
-	/* fall through */
-      case '\n':
-	switch (lex_state) {
-	  case EXPR_BEG:
-	  case EXPR_FNAME:
-	  case EXPR_DOT:
-	  case EXPR_CLASS:
-	  case EXPR_VALUE:
-#ifdef RIPPER
-            if (!fallthru) {
-                ripper_dispatch_scan_event(parser, tIGNORED_NL);
-            }
-            fallthru = Qfalse;
-#endif
-	    goto retry;
-	  default:
-	    break;
-	}
-	while ((c = nextc())) {
-	    switch (c) {
-	      case ' ': case '\t': case '\f': case '\r':
-	      case '\13': /* '\v' */
-		space_seen++;
-		break;
-	      case '.': {
-		  if ((c = nextc()) != '.') {
-		      pushback(c);
-		      pushback('.');
-		      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 = Qtrue;
-	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);
-	    c = tPOW;
-	}
-	else {
-	    if (c == '=') {
-                set_yylval_id('*');
-		lex_state = EXPR_BEG;
-		return tOP_ASGN;
-	    }
-	    pushback(c);
-	    if (IS_ARG() && space_seen && !ISSPACE(c)) {
-		rb_warning0("`*' interpreted as argument prefix");
-		c = tSTAR;
-	    }
-	    else if (IS_BEG()) {
-		c = tSTAR;
-	    }
-	    else {
-		c = '*';
-	    }
-	}
-	switch (lex_state) {
-	  case EXPR_FNAME: case EXPR_DOT:
-	    lex_state = EXPR_ARG; break;
-	  default:
-	    lex_state = EXPR_BEG; break;
-	}
-	return c;
-
-      case '!':
-	c = nextc();
-	if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
-	    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 = Qtrue;
-
-                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 = Qfalse;
-#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;
-	    }
-	}
-
-	switch (lex_state) {
-	  case EXPR_FNAME: case EXPR_DOT:
-	    lex_state = EXPR_ARG; break;
-	  default:
-	    lex_state = EXPR_BEG; break;
-	}
-	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 '<':
-	c = nextc();
-	if (c == '<' &&
-	    lex_state != EXPR_END &&
-	    lex_state != EXPR_DOT &&
-	    lex_state != EXPR_ENDARG &&
-	    lex_state != EXPR_CLASS &&
-	    (!IS_ARG() || space_seen)) {
-	    int token = heredoc_identifier();
-	    if (token) return token;
-	}
-	switch (lex_state) {
-	  case EXPR_FNAME: case EXPR_DOT:
-	    lex_state = EXPR_ARG; break;
-	  default:
-	    lex_state = EXPR_BEG; break;
-	}
-	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);
-	    return tLSHFT;
-	}
-	pushback(c);
-	return '<';
-
-      case '>':
-	switch (lex_state) {
-	  case EXPR_FNAME: case EXPR_DOT:
-	    lex_state = EXPR_ARG; break;
-	  default:
-	    lex_state = EXPR_BEG; break;
-	}
-	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 (lex_state == EXPR_FNAME) {
-	    lex_state = EXPR_END;
-	    return c;
-	}
-	if (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 '?':
-	if (lex_state == EXPR_END ||
-	    lex_state == EXPR_ENDARG) {
-	    lex_state = EXPR_VALUE;
-	    return '?';
-	}
-	c = nextc();
-	if (c == -1) {
-	    compile_error(PARSER_ARG "incomplete character syntax");
-	    return 0;
-	}
-	if (rb_enc_isspace(c, parser->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 = parser->enc;
-	if (!parser_isascii()) {
-	    if (tokadd_mbchar(c) == -1) return 0;
-	}
-	else if ((rb_enc_isalnum(c, parser->enc) || c == '_') &&
-		 lex_p < lex_pend && is_identchar(lex_p, lex_pend, parser->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 {
-                c = read_escape(0, &enc);
-                tokadd(c);
-            }
-        }
-        else {
-	    tokadd(c);
-        }
-	tokfix();
-	set_yylval_str(STR_NEW3(tok(), toklen(), enc, 0));
-	lex_state = EXPR_ENDARG;
-	return tCHAR;
-
-      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_ARG() && space_seen && !ISSPACE(c)) {
-	    rb_warning0("`&' interpreted as argument prefix");
-	    c = tAMPER;
-	}
-	else if (IS_BEG()) {
-	    c = tAMPER;
-	}
-	else {
-	    c = '&';
-	}
-	switch (lex_state) {
-	  case EXPR_FNAME: case EXPR_DOT:
-	    lex_state = EXPR_ARG; break;
-	  default:
-	    lex_state = 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;
-	}
-	if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
-	    lex_state = EXPR_ARG;
-	}
-	else {
-	    lex_state = EXPR_BEG;
-	}
-	pushback(c);
-	return '|';
-
-      case '+':
-	c = nextc();
-	if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
-	    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_ARG() && space_seen && !ISSPACE(c))) {
-	    if (IS_ARG()) arg_ambiguous();
-	    lex_state = EXPR_BEG;
-	    pushback(c);
-	    if (ISDIGIT(c)) {
-		c = '+';
-		goto start_num;
-	    }
-	    return tUPLUS;
-	}
-	lex_state = EXPR_BEG;
-	pushback(c);
-	return '+';
-
-      case '-':
-	c = nextc();
-	if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
-	    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_ARG;
-	    return tLAMBDA;
-	}
-	if (IS_BEG() ||
-	    (IS_ARG() && space_seen && !ISSPACE(c))) {
-	    if (IS_ARG()) arg_ambiguous();
-	    lex_state = EXPR_BEG;
-	    pushback(c);
-	    if (ISDIGIT(c)) {
-		return tUMINUS_NUM;
-	    }
-	    return tUMINUS;
-	}
-	lex_state = EXPR_BEG;
-	pushback(c);
-	return '-';
-
-      case '.':
-	lex_state = EXPR_BEG;
-	if ((c = nextc()) == '.') {
-	    if ((c = nextc()) == '.') {
-		return tDOT3;
-	    }
-	    pushback(c);
-	    return tDOT2;
-	}
-	pushback(c);
-	if (ISDIGIT(c)) {
-	    yyerror("no .<digit> floating literal anymore; put 0 before dot");
-	}
-	lex_state = EXPR_DOT;
-	return '.';
-
-      start_num:
-      case '0': case '1': case '2': case '3': case '4':
-      case '5': case '6': case '7': case '8': case '9':
-	{
-	    int is_float, seen_point, seen_e, nondigit;
-
-	    is_float = seen_point = seen_e = nondigit = 0;
-	    lex_state = EXPR_ENDARG;
-	    newtok();
-	    if (c == '-' || c == '+') {
-		tokadd(c);
-		c = nextc();
-	    }
-	    if (c == '0') {
-		int start = toklen();
-		c = nextc();
-		if (c == 'x' || c == 'X') {
-		    /* hexadecimal */
-		    c = nextc();
-		    if (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) {
-			yyerror("numeric literal without digits");
-		    }
-		    else if (nondigit) goto trailing_uc;
-                    set_yylval_literal(rb_cstr_to_inum(tok(), 16, Qfalse));
-		    return tINTEGER;
-		}
-		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) {
-			yyerror("numeric literal without digits");
-		    }
-		    else if (nondigit) goto trailing_uc;
-                    set_yylval_literal(rb_cstr_to_inum(tok(), 2, Qfalse));
-		    return tINTEGER;
-		}
-		if (c == 'd' || c == 'D') {
-		    /* decimal */
-		    c = nextc();
-		    if (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) {
-			yyerror("numeric literal without digits");
-		    }
-		    else if (nondigit) goto trailing_uc;
-                    set_yylval_literal(rb_cstr_to_inum(tok(), 10, Qfalse));
-		    return tINTEGER;
-		}
-		if (c == '_') {
-		    /* 0_0 */
-		    goto octal_number;
-		}
-		if (c == 'o' || c == 'O') {
-		    /* prefixed octal */
-		    c = nextc();
-		    if (c == '_' || !ISDIGIT(c)) {
-			yyerror("numeric literal without digits");
-		    }
-		}
-		if (c >= '0' && c <= '7') {
-		    /* octal */
-		  octal_number:
-	            do {
-			if (c == '_') {
-			    if (nondigit) break;
-			    nondigit = c;
-			    continue;
-			}
-			if (c < '0' || c > '7') break;
-			nondigit = 0;
-			tokadd(c);
-		    } while ((c = nextc()) != -1);
-		    if (toklen() > start) {
-			pushback(c);
-			tokfix();
-			if (nondigit) goto trailing_uc;
-                        set_yylval_literal(rb_cstr_to_inum(tok(), 8, Qfalse));
-			return tINTEGER;
-		    }
-		    if (nondigit) {
-			pushback(c);
-			goto trailing_uc;
-		    }
-		}
-		if (c > '7' && c <= '9') {
-		    yyerror("Invalid octal digit");
-		}
-		else if (c == '.' || c == 'e' || c == 'E') {
-		    tokadd('0');
-		}
-		else {
-		    pushback(c);
-                    set_yylval_literal(INT2FIX(0));
-		    return tINTEGER;
-		}
-	    }
-
-	    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 (!ISDIGIT(c0)) {
-			    pushback(c0);
-			    goto decode_num;
-			}
-			c = c0;
-		    }
-		    tokadd('.');
-		    tokadd(c);
-		    is_float++;
-		    seen_point++;
-		    nondigit = 0;
-		    break;
-
-		  case 'e':
-		  case 'E':
-		    if (nondigit) {
-			pushback(c);
-			c = nondigit;
-			goto decode_num;
-		    }
-		    if (seen_e) {
-			goto decode_num;
-		    }
-		    tokadd(c);
-		    seen_e++;
-		    is_float++;
-		    nondigit = c;
-		    c = nextc();
-		    if (c != '-' && c != '+') continue;
-		    tokadd(c);
-		    nondigit = c;
-		    break;
-
-		  case '_':	/* `_' in number just ignored */
-		    if (nondigit) goto decode_num;
-		    nondigit = c;
-		    break;
-
-		  default:
-		    goto decode_num;
-		}
-		c = nextc();
-	    }
-
-	  decode_num:
-	    pushback(c);
-	    tokfix();
-	    if (nondigit) {
-		char tmp[30];
-	      trailing_uc:
-		sprintf(tmp, "trailing `%c' in number", nondigit);
-		yyerror(tmp);
-	    }
-	    if (is_float) {
-		double d = strtod(tok(), 0);
-		if (errno == ERANGE) {
-		    rb_warningS("Float %s out of range", tok());
-		    errno = 0;
-		}
-                set_yylval_literal(DOUBLE2NUM(d));
-		return tFLOAT;
-	    }
-            set_yylval_literal(rb_cstr_to_inum(tok(), 10, Qfalse));
-	    return tINTEGER;
-	}
-
-      case ')':
-      case ']':
-	paren_nest--;
-      case '}':
-	COND_LEXPOP();
-	CMDARG_LEXPOP();
-	if (c == ')')
-	    lex_state = EXPR_END;
-	else
-	    lex_state = EXPR_ENDARG;
-	return c;
-
-      case ':':
-	c = nextc();
-	if (c == ':') {
-	    if (IS_BEG() ||
-		lex_state == EXPR_CLASS || (IS_ARG() && space_seen)) {
-		lex_state = EXPR_BEG;
-		return tCOLON3;
-	    }
-	    lex_state = EXPR_DOT;
-	    return tCOLON2;
-	}
-	if (lex_state == EXPR_END ||
-	    lex_state == EXPR_ENDARG || ISSPACE(c)) {
-	    pushback(c);
-	    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_BEG()) {
-	    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_ARG() && space_seen) {
-	    if (!ISSPACE(c)) {
-		arg_ambiguous();
-		lex_strterm = NEW_STRTERM(str_regexp, '/', 0);
-		return tREGEXP_BEG;
-	    }
-	}
-	switch (lex_state) {
-	  case EXPR_FNAME: case EXPR_DOT:
-	    lex_state = EXPR_ARG; break;
-	  default:
-	    lex_state = EXPR_BEG; break;
-	}
-	return '/';
-
-      case '^':
-	if ((c = nextc()) == '=') {
-            set_yylval_id('^');
-	    lex_state = EXPR_BEG;
-	    return tOP_ASGN;
-	}
-	switch (lex_state) {
-	  case EXPR_FNAME: case EXPR_DOT:
-	    lex_state = EXPR_ARG; break;
-	  default:
-	    lex_state = EXPR_BEG; break;
-	}
-	pushback(c);
-	return '^';
-
-      case ';':
-	lex_state = EXPR_BEG;
-	command_start = Qtrue;
-	return ';';
-
-      case ',':
-	lex_state = EXPR_BEG;
-	return ',';
-
-      case '~':
-	if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
-	    if ((c = nextc()) != '@') {
-		pushback(c);
-	    }
-	    lex_state = EXPR_ARG;
-	}
-	else {
-	    lex_state = EXPR_BEG;
-	}
-	return '~';
-
-      case '(':
-	if (IS_BEG()) {
-	    c = tLPAREN;
-	}
-	else if (space_seen) {
-	    if (lex_state == EXPR_CMDARG) {
-		c = tLPAREN_ARG;
-	    }
-	    else if (lex_state == EXPR_ARG) {
-		rb_warning0("don't put space before argument parentheses");
-		c = '(';
-	    }
-	}
-	paren_nest++;
-	COND_PUSH(0);
-	CMDARG_PUSH(0);
-	lex_state = EXPR_BEG;
-	return c;
-
-      case '[':
-	paren_nest++;
-	if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
-	    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 '{':
-	if (lpar_beg && lpar_beg == paren_nest) {
-	    lex_state = EXPR_BEG;
-	    lpar_beg = 0;
-	    --paren_nest;
-	    return tLAMBEG;
-	}
-	if (IS_ARG() || lex_state == EXPR_END)
-	    c = '{';          /* block (primary) */
-	else if (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 = Qtrue;
-	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 '%':
-	if (IS_BEG()) {
-	    int term;
-	    int paren;
-
-	    c = nextc();
-	  quotation:
-	    if (!ISALNUM(c)) {
-		term = c;
-		c = 'Q';
-	    }
-	    else {
-		term = nextc();
-		if (rb_enc_isalnum(term, parser->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 '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_ARG() && space_seen && !ISSPACE(c)) {
-	    goto quotation;
-	}
-	switch (lex_state) {
-	  case EXPR_FNAME: case EXPR_DOT:
-	    lex_state = EXPR_ARG; break;
-	  default:
-	    lex_state = EXPR_BEG; break;
-	}
-	pushback(c);
-	return '%';
-
-      case '$':
-	last_state = lex_state;
-	lex_state = EXPR_ENDARG;
-	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);
-	    tokfix();
-            set_yylval_id(rb_intern(tok()));
-	    return tGVAR;
-
-	  case '-':
-	    tokadd('$');
-	    tokadd(c);
-	    c = nextc();
-	    if (parser_is_identchar()) {
-		if (tokadd_mbchar(c) == -1) return 0;
-	    }
-	    else {
-		pushback(c);
-	    }
-	  gvar:
-	    tokfix();
-            set_yylval_id(rb_intern(tok()));
-	    return tGVAR;
-
-	  case '&':		/* $&: last match */
-	  case '`':		/* $`: string before last match */
-	  case '\'':		/* $': string after last match */
-	  case '+':		/* $+: string matches last paren. */
-	    if (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 (ISDIGIT(c));
-	    pushback(c);
-	    if (last_state == EXPR_FNAME) goto gvar;
-	    tokfix();
-	    set_yylval_node(NEW_NTH_REF(atoi(tok()+1)));
-	    return tNTH_REF;
-
-	  default:
-	    if (!parser_is_identchar()) {
-		pushback(c);
-		return '$';
-	    }
-	  case '0':
-	    tokadd('$');
-	}
-	break;
-
-      case '@':
-	c = nextc();
-	newtok();
-	tokadd('@');
-	if (c == '@') {
-	    tokadd('@');
-	    c = nextc();
-	}
-	if (ISDIGIT(c)) {
-	    if (tokidx == 1) {
-		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 (!parser_is_identchar()) {
-	    pushback(c);
-	    return '@';
-	}
-	break;
-
-      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()) {
-	    rb_compile_error(PARSER_ARG  "Invalid char `\\x%02X' in expression", c);
-	    goto retry;
-	}
-
-	newtok();
-	break;
-    }
-
-#if !WITH_OBJC
-    mb = ENC_CODERANGE_7BIT;
-#endif
-    do {
-#if !WITH_OBJC
-	if (!ISASCII(c)) mb = ENC_CODERANGE_UNKNOWN;
-#endif
-	if (tokadd_mbchar(c) == -1) return 0;
-	c = nextc();
-    } while (parser_is_identchar());
-    switch (tok()[0]) {
-      case '@': case '$':
-	pushback(c);
-	break;
-      default:
-	if ((c == '!' || c == '?') && !peek('=')) {
-	    tokadd(c);
-	}
-	else {
-	    pushback(c);
-	}
-    }
-    tokfix();
-
-    {
-	int result = 0;
-
-	last_state = lex_state;
-	switch (tok()[0]) {
-	  case '$':
-	    lex_state = EXPR_ENDARG;
-	    result = tGVAR;
-	    break;
-	  case '@':
-	    lex_state = EXPR_ENDARG;
-	    if (tok()[1] == '@')
-		result = tCVAR;
-	    else
-		result = tIVAR;
-	    break;
-
-	  default:
-	    if (toklast() == '!' || toklast() == '?') {
-		result = tFID;
-	    }
-	    else {
-		if (lex_state == EXPR_FNAME) {
-		    if ((c = nextc()) == '=' && !peek('~') && !peek('>') &&
-			(!peek('=') || (lex_p + 1 < lex_pend && lex_p[1] == '>'))) {
-			result = tIDENTIFIER;
-			tokadd(c);
-			tokfix();
-		    }
-		    else {
-			pushback(c);
-		    }
-		}
-		if (result == 0 && ISUPPER(tok()[0])) {
-		    result = tCONSTANT;
-		}
-		else {
-		    result = tIDENTIFIER;
-		}
-	    }
-
-#if WITH_OBJC
-	    if (lex_state != EXPR_DOT) {
-#else
-	    if (mb == ENC_CODERANGE_7BIT && lex_state != EXPR_DOT) {
-#endif
-		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 (state == EXPR_FNAME) {
-                        set_yylval_id(rb_intern(kw->name));
-			return kw->id[0];
-		    }
-		    if (kw->id[0] == keyword_do) {
-			command_start = Qtrue;
-			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() && state != EXPR_CMDARG)
-			    return keyword_do_block;
-			if (state == EXPR_ENDARG || state == EXPR_BEG)
-			    return keyword_do_block;
-			return keyword_do;
-		    }
-		    if (state == EXPR_BEG || state == EXPR_VALUE)
-			return kw->id[0];
-		    else {
-			if (kw->id[0] != kw->id[1])
-			    lex_state = EXPR_BEG;
-			return kw->id[1];
-		    }
-		}
-	    }
-
-	    if ((lex_state == EXPR_BEG && !cmd_state) ||
-		lex_state == EXPR_ARG ||
-		lex_state == EXPR_CMDARG) {
-		if (peek(':') && !(lex_p + 1 < lex_pend && lex_p[1] == ':')) {
-		    lex_state = EXPR_BEG;
-		    nextc();
-		    set_yylval_id(TOK_INTERN(!ENC_SINGLE(mb)));
-		    return tLABEL;
-		}
-	    }
-	    if (IS_BEG() ||
-		lex_state == EXPR_DOT ||
-		IS_ARG()) {
-		if (cmd_state) {
-		    lex_state = EXPR_CMDARG;
-		}
-		else {
-		    lex_state = EXPR_ARG;
-		}
-	    }
-	    else {
-		lex_state = EXPR_END;
-	    }
-	}
-        {
-            ID ident = TOK_INTERN(!ENC_SINGLE(mb));
-
-            set_yylval_id(ident);
-            if (last_state != EXPR_DOT && is_local_id(ident) && lvar_defined(ident)) {
-                lex_state = EXPR_END;
-            }
-        }
-	return result;
-    }
-}
-
-#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 = (union tmpyystype*)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;
-}
-
-enum node_type
-nodetype(NODE *node)			/* for debug */
-{
-    return (enum node_type)nd_type(node);
-}
-
-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);
-	GC_WB(&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(nd, "statement not reached");
-	}
-	break;
-
-      default:
-	break;
-    }
-
-    if (nd_type(tail) != NODE_BLOCK) {
-	tail = NEW_BLOCK(tail);
-	GC_WB(&tail->nd_end, tail);
-    }
-    GC_WB(&end->nd_next, tail);
-    GC_WB(&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;
-    GC_WB(&last->nd_next, NEW_LIST(item));
-    GC_WB(&list->nd_next->nd_end, last->nd_next);
-    return list;
-}
-
-/* concat two lists */
-static NODE*
-list_concat_gen(struct parser_params *parser, 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;
-    GC_WB(&last->nd_next, tail);
-    if (tail->nd_next) {
-	GC_WB(&head->nd_next->nd_end, tail->nd_next->nd_end);
-    }
-    else {
-	GC_WB(&head->nd_next->nd_end, tail);
-    }
-
-    return head;
-}
-
-static int
-literal_concat0(struct parser_params *parser, VALUE head, VALUE tail)
-{
-#if !WITH_OBJC
-    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;
-    }
-#endif
-    RSTRING_SYNC(head);
-    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;
-
-    if (!head) return tail;
-    if (!tail) return head;
-
-    htype = nd_type(head);
-    if (htype == NODE_EVSTR) {
-	NODE *node = NEW_DSTR(STR_NEW0());
-	head = list_append(node, head);
-    }
-    switch (nd_type(tail)) {
-      case NODE_STR:
-	if (htype == NODE_STR) {
-	    if (!literal_concat0(parser, head->nd_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;
-	    GC_WB(&tail->nd_lit, head->nd_lit);
-	    rb_gc_force_recycle((VALUE)head);
-	    head = tail;
-	}
-	else {
-	    nd_set_type(tail, NODE_ARRAY);
-	    GC_WB(&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(STR_NEW0()), 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 (TYPE(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 (TYPE(node2->nd_lit) == T_REGEXP) {
-		return NEW_MATCH3(node2, node1);
-	    }
-	}
-    }
-
-    return NEW_CALL(node1, tMATCH, NEW_LIST(node2));
-}
-
-static NODE*
-gettable_gen(struct parser_params *parser, ID id)
-{
-    if (id == keyword_self) {
-	return NEW_SELF();
-    }
-    else if (id == keyword_nil) {
-	return NEW_NIL();
-    }
-    else if (id == keyword_true) {
-	return NEW_TRUE();
-    }
-    else if (id == keyword_false) {
-	return NEW_FALSE();
-    }
-    else if (id == keyword__FILE__) {
-	return NEW_STR(STR_NEW2(ruby_sourcefile));
-    }
-    else if (id == keyword__LINE__) {
-	return NEW_LIT(INT2FIX(ruby_sourceline));
-    }
-    else if (id == keyword__ENCODING__) {
-	return NEW_LIT(rb_enc_from_encoding(parser->enc));
-    }
-    else if (is_local_id(id)) {
-#if WITH_OBJC
-	if (dyna_in_block() && dvar_defined(id)) {
-	    dyna_var(id);
-	    return NEW_DVAR(id);
-	}
-#else
-	if (dyna_in_block() && dvar_defined(id)) return NEW_DVAR(id);
-#endif
-	if (local_id(id)) return NEW_LVAR(id);
-	/* method call without arguments */
-	return NEW_VCALL(id);
-    }
-    else if (is_global_id(id)) {
-	return NEW_GVAR(id);
-    }
-    else if (is_instance_id(id)) {
-	return NEW_IVAR(id);
-    }
-    else if (is_const_id(id)) {
-	return NEW_CONST(id);
-    }
-    else if (is_class_id(id)) {
-	return NEW_CVAR(id);
-    }
-    compile_error(PARSER_ARG "identifier %s is not valid to get", rb_id2name(id));
-    return 0;
-}
-
-static NODE*
-assignable_gen(struct parser_params *parser, ID id, NODE *val)
-{
-    if (!id) return 0;
-    if (id == keyword_self) {
-	yyerror("Can't change the value of self");
-    }
-    else if (id == keyword_nil) {
-	yyerror("Can't assign to nil");
-    }
-    else if (id == keyword_true) {
-	yyerror("Can't assign to true");
-    }
-    else if (id == keyword_false) {
-	yyerror("Can't assign to false");
-    }
-    else if (id == keyword__FILE__) {
-	yyerror("Can't assign to __FILE__");
-    }
-    else if (id == keyword__LINE__) {
-	yyerror("Can't assign to __LINE__");
-    }
-    else if (id == keyword__ENCODING__) {
-	yyerror("Can't assign to __ENCODING__");
-    }
-    else if (is_local_id(id)) {
-	if (dyna_in_block()) {
-	    if (dvar_curr(id)) {
-#if WITH_OBJC
-		dyna_var(id);
-#endif
-		return NEW_DASGN_CURR(id, val);
-	    }
-	    else if (dvar_defined(id)) {
-#if WITH_OBJC
-		dyna_var(id);
-#endif
-		return NEW_DASGN(id, val);
-	    }
-	    else if (local_id(id)) {
-		return NEW_LASGN(id, val);
-	    }
-	    else{
-		dyna_var(id);
-		return NEW_DASGN_CURR(id, val);
-	    }
-	}
-	else {
-	    if (!local_id(id)) {
-		local_var(id);
-	    }
-	    return NEW_LASGN(id, val);
-	}
-    }
-    else if (is_global_id(id)) {
-	return NEW_GASGN(id, val);
-    }
-    else if (is_instance_id(id)) {
-	return NEW_IASGN(id, val);
-    }
-    else if (is_const_id(id)) {
-	if (in_def || in_single)
-	    yyerror("dynamic constant assignment");
-	return NEW_CDECL(id, val, 0);
-    }
-    else if (is_class_id(id)) {
-	return NEW_CVASGN(id, val);
-    }
-    else {
-	compile_error(PARSER_ARG "identifier %s is not valid to set", rb_id2name(id));
-    }
-    return 0;
-}
-
-static void
-shadowing_lvar_gen(struct parser_params *parser, ID name)
-{
-    static ID uscore;
-
-    if (!uscore) uscore = rb_intern("_");
-    if (uscore == name) return;
-    if (dyna_in_block()) {
-	if (dvar_curr(name)) {
-	    yyerror("duplicated argument name");
-	}
-	else if (dvar_defined(name) || local_id(name)) {
-	    rb_warningS("shadowing outer local variable - %s", rb_id2name(name));
-	    vtable_add(lvtbl->vars, name);
-	}
-    }
-    else {
-	if (local_id(name)) {
-	    yyerror("duplicated argument 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 - %s",
-		      rb_id2name(name));
-	return;
-    }
-    shadowing_lvar(name);
-    dyna_var(name);
-}
-
-static NODE *
-aryset_gen(struct parser_params *parser, NODE *recv, NODE *idx)
-{
-    if (recv && nd_type(recv) == NODE_SELF)
-	recv = (NODE *)1;
-    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");
-    }
-}
-
-ID
-rb_id_attrset(ID id)
-{
-    id &= ~ID_SCOPE_MASK;
-    id |= ID_ATTRSET;
-    return id;
-}
-
-static NODE *
-attrset_gen(struct parser_params *parser, NODE *recv, ID id)
-{
-    if (recv && nd_type(recv) == NODE_SELF)
-	recv = (NODE *)1;
-    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:
-	GC_WB(&node1->nd_iter, arg_concat(node1->nd_iter, node2));
-	return node1;
-      case NODE_ARGSPUSH:
-	if (nd_type(node2) != NODE_ARRAY) break;
-	GC_WB(&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) break;
-	GC_WB(&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:
-	GC_WB(&node1->nd_head, arg_append(node1->nd_head, node2));
-	return node1;
-      case NODE_ARGSPUSH:
-	GC_WB(&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:
-	GC_WB(&lhs->nd_value, rhs);
-	break;
-
-      case NODE_ATTRASGN:
-      case NODE_CALL:
-	GC_WB(&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_DEFN:
-	  case NODE_DEFS:
-	    parser_warning(node, "void value expression");
-	    return Qfalse;
-
-	  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 Qfalse;
-
-	  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 Qfalse;
-	    node = node->nd_else;
-	    break;
-
-	  case NODE_AND:
-	  case NODE_OR:
-	    cond = 1;
-	    node = node->nd_2nd;
-	    break;
-
-	  default:
-	    return Qtrue;
-	}
-    }
-
-    return Qtrue;
-}
-
-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("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 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) {
-	switch (nd_type(node)) {
-	  end:
-	  case NODE_NIL:
-	    *body = 0;
-	    return;
-	  case NODE_RETURN:
-	    *body = node = node->nd_stts;
-	    continue;
-	  case NODE_BEGIN:
-	    *body = node = node->nd_body;
-	    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 (!subnodes(nd_head, nd_resq)) goto end;
-	    break;
-	  default:
-	    return;
-	}
-	node = *body;
-    }
-
-#undef subnodes
-}
-
-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_GASGN:
-      case NODE_IASGN:
-	break;
-
-      default:
-	return 0;
-    }
-
-    switch (nd_type(node->nd_value)) {
-      case NODE_LIT:
-      case NODE_STR:
-      case NODE_NIL:
-      case NODE_TRUE:
-      case NODE_FALSE:
-	/* reports always */
-	parser_warn(node->nd_value, "found = in conditional, should be ==");
-	return 1;
-
-      case NODE_DSTR:
-      case NODE_XSTR:
-      case NODE_DXSTR:
-      case NODE_EVSTR:
-      case NODE_DREGX:
-      default:
-	break;
-    }
-    return 1;
-}
-
-static int
-e_option_supplied(struct parser_params *parser)
-{
-    if (strcmp(ruby_sourcefile, "-e") == 0)
-	return Qtrue;
-    return Qfalse;
-}
-
-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 NODE *cond0(struct parser_params*,NODE*);
-
-static NODE*
-range_op(struct parser_params *parser, NODE *node)
-{
-    enum node_type type;
-
-    if (!e_option_supplied(parser)) return node;
-    if (node == 0) return 0;
-
-    value_expr(node);
-    node = cond0(parser, node);
-    type = nd_type(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 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:
-	GC_WB(&node->nd_1st, cond0(parser, node->nd_1st));
-	GC_WB(&node->nd_2nd, cond0(parser, node->nd_2nd));
-	break;
-
-      case NODE_DOT2:
-      case NODE_DOT3:
-	GC_WB(&node->nd_beg, range_op(parser, node->nd_beg));
-	GC_WB(&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 (TYPE(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 && nd_type(left) == type) {
-	NODE *node = left, *second;
-	while ((second = node->nd_2nd) != 0 && nd_type(second) == type) {
-	    node = second;
-	}
-	GC_WB(&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)
-{
-    long state = Qtrue;
-
-    if (node) {
-        no_blockarg(parser, node);
-	if (node && nd_type(node) == NODE_SPLAT) {
-	    state = Qtrue;
-	}
-    }
-    else {
-        state = Qfalse;
-    }
-    return NEW_YIELD(node, state);
-}
-
-static NODE*
-negate_lit(NODE *node)
-{
-    switch (TYPE(node->nd_lit)) {
-      case T_FIXNUM:
-	node->nd_lit = LONG2FIX(-FIX2LONG(node->nd_lit));
-	break;
-      case T_BIGNUM:
-	GC_WB(&node->nd_lit, rb_funcall(node->nd_lit,tUMINUS,0,0));
-	break;
-      case T_FLOAT:
-	RFLOAT(node->nd_lit)->float_value = -RFLOAT_VALUE(node->nd_lit);
-	break;
-      default:
-	break;
-    }
-    return node;
-}
-
-static NODE *
-arg_blk_pass(NODE *node1, NODE *node2)
-{
-    if (node2) {
-	GC_WB(&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, ID b)
-{
-    int saved_line = ruby_sourceline;
-    NODE *node;
-    NODE *i1, *i2 = 0;
-
-    node = NEW_ARGS(m ? m->nd_plen : 0, o);
-    i1 = m ? m->nd_next : 0;
-    GC_WB(&node->nd_next, NEW_ARGS_AUX(r, b));
-
-    if (p) {
-	i2 = p->nd_next;
-	GC_WB(&node->nd_next->nd_next, NEW_ARGS_AUX(p->nd_pid, p->nd_plen));
-    }
-    else if (i1) {
-	GC_WB(&node->nd_next->nd_next, NEW_ARGS_AUX(0, 0));
-    }
-    if (i1 || i2) {
-	GC_WB(&node->nd_next->nd_next->nd_next, NEW_NODE(NODE_AND, i1, i2, 0));
-    }
-    ruby_sourceline = saved_line;
-    return node;
-}
-
-static void
-local_push_gen(struct parser_params *parser, int inherit_dvars)
-{
-    struct local_vars *local;
-
-    local = ALLOC(struct local_vars);
-    GC_WB(&local->prev, lvtbl);
-    GC_WB(&local->args, vtable_alloc(0));
-    GC_WB(&local->vars, vtable_alloc(inherit_dvars ? DVARS_INHERIT : DVARS_TOPSCOPE));
-    GC_WB(&lvtbl, local);
-}
-
-static void
-local_pop_gen(struct parser_params *parser)
-{
-    struct local_vars *local = lvtbl->prev;
-    vtable_free(lvtbl->args);
-    vtable_free(lvtbl->vars);
-    xfree(lvtbl);
-    GC_WB(&lvtbl, local);
-}
-
-static ID*
-local_tbl_gen(struct parser_params *parser)
-{
-    int cnt = vtable_size(lvtbl->args) + vtable_size(lvtbl->vars);
-    ID *buf;
-
-    if (cnt <= 0) return 0;
-#if WITH_OBJC
-    buf = ALLOC_N(ID, cnt + 2);
-    buf[0] = vtable_size(lvtbl->args);
-    vtable_tblcpy(buf+1, lvtbl->args);
-    buf[vtable_size(lvtbl->args) + 1] = vtable_size(lvtbl->vars);
-    vtable_tblcpy(buf+vtable_size(lvtbl->args)+2, lvtbl->vars);
-#else
-    buf = ALLOC_N(ID, cnt + 1);
-    vtable_tblcpy(buf+1, lvtbl->args);
-    vtable_tblcpy(buf+vtable_size(lvtbl->args)+1, lvtbl->vars);
-    buf[0] = cnt;
-#endif
-    return buf;
-}
-
-static int
-arg_var_gen(struct parser_params *parser, ID id)
-{
-    vtable_add(lvtbl->args, id);
-    return vtable_size(lvtbl->args) - 1;
-}
-
-#if WITH_OBJC
-static NODE *
-process_named_args_gen(struct parser_params *parser, NODE *n)
-{
-    NODE *args = n->nd_args;
-    if (args != NULL 
-	&& args->nd_argc == 2 
-	&& nd_type(args->u3.node->u1.node) == NODE_ARRAY
-	&& args->u3.node->u1.node->flags & NODE_ARRAY_NAMED_ARGS) {
-
-	NODE *named_args;
-	NODE *new_argv;
-	NODE *p;
-	char buf[512];
-	bool flip;	
-
-	new_argv = NEW_LIST(args->nd_head);
-
-	strlcpy(buf, rb_id2name(n->u2.id), sizeof buf);
-	strlcat(buf, ":", sizeof buf);
-	
-	named_args = args->u3.node->u1.node;
-	for (flip = true, p = named_args; 
-	     p != NULL; 
-	     p = p->nd_next, flip = !flip) {
-	    if (flip) {
-		strlcat(buf, rb_sym2name(p->nd_head->nd_lit),
-			sizeof buf);
-		strlcat(buf, ":", sizeof buf);
-	    }
-	    else {
-		list_append(new_argv, p->nd_head);
-	    }	    
-	}
-
-	n->nd_mid = rb_intern(buf);
-	GC_WB(&n->nd_args, new_argv);
-    }
-    return n;
-}
-
-static NODE *
-unprocess_named_args_gen(struct parser_params *parser, NODE *n)
-{
-    NODE *args = n->nd_args;
-    if (args != NULL 
-	&& args->nd_argc == 2 
-	&& nd_type(args->u3.node->u1.node) == NODE_ARRAY
-	&& args->u3.node->u1.node->flags & NODE_ARRAY_NAMED_ARGS) {
-
-	NODE *new_argv = NEW_LIST(args->nd_head);
-	arg_append(new_argv, NEW_HASH(args->u3.node->u1.node));
-	GC_WB(&n->nd_args, new_argv);
-    }
-    return n;
-}
-
-static void
-named_arg_gen(struct parser_params *parser, ID id, int init)
-{
-    if (init)
-	memset(named_mid, 0, sizeof named_mid);
-
-    strlcat(named_mid, rb_id2name(id), sizeof named_mid);
-    strlcat(named_mid, ":", sizeof named_mid);
-
-    if (!init) 
-	in_def_named_args++;
-}
-#endif
-
-static int
-local_var_gen(struct parser_params *parser, ID id)
-{
-    vtable_add(lvtbl->vars, id);
-    return vtable_size(lvtbl->vars) - 1;
-}
-
-static int
-local_id_gen(struct parser_params *parser, ID id)
-{
-    struct vtable *vars, *args;
-
-    vars = lvtbl->vars;
-    args = lvtbl->args;
-
-    while (vars && POINTER_P(vars->prev)) {
-	vars = vars->prev;
-	args = args->prev;
-    }
-
-    if (vars && vars->prev == DVARS_INHERIT) {
-	return rb_local_defined(id);
-    }
-    else {
-	return (vtable_included(args, id) ||
-		vtable_included(vars, id));
-    }
-}
-
-static void
-dyna_push_gen(struct parser_params *parser)
-{
-    GC_WB(&lvtbl->args, vtable_alloc(lvtbl->args));
-    GC_WB(&lvtbl->vars, vtable_alloc(lvtbl->vars));
-}
-
-static void
-dyna_pop_gen(struct parser_params *parser)
-{
-    struct vtable *tmp;
-
-    tmp = lvtbl->args;
-    GC_WB(&lvtbl->args, lvtbl->args->prev);
-    vtable_free(tmp);
-    tmp = lvtbl->vars;
-    GC_WB(&lvtbl->vars, lvtbl->vars->prev);
-    vtable_free(tmp);
-}
-
-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)
-{
-    struct vtable *vars, *args;
-
-    args = lvtbl->args;
-    vars = lvtbl->vars;
-
-    while (POINTER_P(vars)) {
-	if (vtable_included(args, id)) {
-	    return 1;
-	}
-	if (vtable_included(vars, id)) {
-	    return 1;
-	}
-	args = args->prev;
-	vars = vars->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));
-}
-
-VALUE rb_reg_compile(VALUE str, int options);
-VALUE rb_reg_check_preprocess(VALUE);
-
-static void
-reg_fragment_setenc_gen(struct parser_params* parser, VALUE str, int options)
-{
-#if WITH_OBJC
-    /* TODO */
-#else
-    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 (parser->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)));
-#endif
-}
-
-static void
-reg_fragment_check_gen(struct parser_params* parser, VALUE str, int options)
-{
-    VALUE err;
-    reg_fragment_setenc_gen(parser, str, options);
-    err = rb_reg_check_preprocess(str);
-    if (err != Qnil) {
-        err = rb_obj_as_string(err);
-        compile_error(PARSER_ARG "%s", RSTRING_PTR(err));
-	RB_GC_GUARD(err);
-    }
-}
-
-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;
-    int 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)) ||
-	rb_reserved_word(s, len) || !rb_enc_symname2_p(s, len, enc)) {
-        return ST_CONTINUE;
-    }
-    var = rb_intern3(s, len, enc);
-    if (dvar_defined(var) || local_id(var)) {
-        rb_warningS("named capture conflicts a local variable - %s", 
-                    rb_id2name(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, (void*)&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
-reg_compile_gen(struct parser_params* parser, VALUE str, int options)
-{
-    VALUE re;
-    VALUE err;
-
-    reg_fragment_setenc(str, options);
-    err = rb_errinfo();
-    re = rb_reg_compile(str, options & RE_OPTION_MASK);
-    rb_objc_retain((void *)re);
-    if (NIL_P(re)) {
-	ID mesg = rb_intern("mesg");
-	VALUE m = rb_attr_get(rb_errinfo(), mesg);
-	rb_set_errinfo(err);
-	if (!NIL_P(err)) {
-	    rb_str_append(rb_str_cat(rb_attr_get(err, mesg), "\n", 1), m);
-	}
-	else {
-	    compile_error(PARSER_ARG "%s", RSTRING_PTR(m));
-	}
-	return Qnil;
-    }
-    return re;
-}
-
-void
-rb_gc_mark_parser(void)
-{
-}
-
-NODE*
-rb_parser_append_print(VALUE vparser, NODE *node)
-{
-    NODE *prelude = 0;
-    NODE *scope = node;
-    struct parser_params *parser;
-
-    if (!node) return node;
-
-    Data_Get_Struct(vparser, struct parser_params, 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) {
-	GC_WB(&prelude->nd_body, node);
-	GC_WB(&scope->nd_body, prelude);
-    }
-    else {
-	GC_WB(&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;
-
-    Data_Get_Struct(vparser, struct parser_params, 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) {
-	GC_WB(&prelude->nd_body, node);
-	GC_WB(&scope->nd_body, prelude);
-    }
-    else {
-	GC_WB(&scope->nd_body, node);
-    }
-
-    return scope;
-}
-
-static const struct {
-    ID token;
-    const char *name;
-} op_tbl[] = {
-    {tDOT2,	".."},
-    {tDOT3,	"..."},
-    {'+',	"+"},
-    {'-',	"-"},
-    {'+',	"+(binary)"},
-    {'-',	"-(binary)"},
-    {'*',	"*"},
-    {'/',	"/"},
-    {'%',	"%"},
-    {tPOW,	"**"},
-    {tUPLUS,	"+@"},
-    {tUMINUS,	"-@"},
-    {'|',	"|"},
-    {'^',	"^"},
-    {'&',	"&"},
-    {'!',	"!"},
-    {tCMP,	"<=>"},
-    {'>',	">"},
-    {tGEQ,	">="},
-    {'<',	"<"},
-    {tLEQ,	"<="},
-    {tEQ,	"=="},
-    {tEQQ,	"==="},
-    {tNEQ,	"!="},
-    {tMATCH,	"=~"},
-    {tNMATCH,	"!~"},
-    {'~',	"~"},
-    {'!',	"!"},
-    {tAREF,	"[]"},
-    {tASET,	"[]="},
-    {tLSHFT,	"<<"},
-    {tRSHFT,	">>"},
-    {tCOLON2,	"::"},
-    {'`',	"`"},
-    {0,	0}
-};
-
-static struct symbols {
-    ID last_id;
-#if WITH_OBJC
-    CFMutableDictionaryRef sym_id;
-    CFMutableDictionaryRef id_str;
-#else
-    st_table *sym_id;
-    st_table *id_str;
-#endif
-    VALUE op_sym[tLAST_TOKEN];
-} global_symbols = {tLAST_TOKEN >> ID_SCOPE_SHIFT};
-
-static const struct st_hash_type symhash = {
-    rb_str_hash_cmp,
-    rb_str_hash,
-};
-
-struct ivar2_key {
-    ID id;
-    VALUE klass;
-};
-
-static int
-ivar2_cmp(struct ivar2_key *key1, struct ivar2_key *key2)
-{
-    if (key1->id == key2->id && key1->klass == key2->klass) {
-	return 0;
-    }
-    return 1;
-}
-
-static int
-ivar2_hash(struct ivar2_key *key)
-{
-    return (key->id << 8) ^ (key->klass >> 2);
-}
-
-static const struct st_hash_type ivar2_hash_type = {
-    ivar2_cmp,
-    ivar2_hash,
-};
-
-void
-Init_sym(void)
-{
-#if WITH_OBJC
-    global_symbols.sym_id = CFDictionaryCreateMutable(NULL,
-	0, NULL, NULL);
-    GC_ROOT(&global_symbols.sym_id);
-    global_symbols.id_str = CFDictionaryCreateMutable(NULL,
-	0, NULL, NULL);
-    GC_ROOT(&global_symbols.id_str);
-    rb_cSymbol = rb_objc_create_class("Symbol", (VALUE)objc_getClass("NSString"));
-#else
-    global_symbols.sym_id = st_init_table_with_size(&symhash, 1000);
-    global_symbols.id_str = st_init_numtable_with_size(1000);
-#endif
-    rb_intern2("", 0);
-}
-
-#if !WITH_OBJC 
-void
-rb_gc_mark_symbols(void)
-{
-    rb_mark_tbl(global_symbols.id_str);
-    rb_gc_mark_locations(global_symbols.op_sym,
-			 global_symbols.op_sym + tLAST_TOKEN);
-}
-#endif
-
-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_INTERNAL | (id << ID_SCOPE_SHIFT);
-}
-
-static int
-is_special_global_name(const char *m, const char *e, rb_encoding *enc)
-{
-    int mb = 0;
-
-    if (m >= e) return 0;
-    switch (*m) {
-      case '~': case '*': case '$': case '?': case '!': case '@':
-      case '/': case '\\': case ';': case ',': case '.': case '=':
-      case ':': case '<': case '>': case '\"':
-      case '&': case '`': case '\'': case '+':
-      case '0':
-	++m;
-	break;
-      case '-':
-	++m;
-	if (m < e && is_identchar(m, e, enc)) {
-	    if (!ISASCII(*m)) mb = 1;
-#if WITH_OBJC
-	    m += 1;
-#else
-	    m += rb_enc_mbclen(m, e, enc);
-#endif
-	}
-	break;
-      default:
-	if (!rb_enc_isdigit(*m, enc)) return 0;
-	do {
-	    if (!ISASCII(*m)) mb = 1;
-	    ++m;
-	} while (rb_enc_isdigit(*m, enc));
-    }
-    return m == e ? mb + 1 : 0;
-}
-
-int
-rb_symname_p(const char *name)
-{
-#if WITH_OBJC
-    return rb_enc_symname_p(name, NULL);
-#else
-    return rb_enc_symname_p(name, rb_ascii8bit_encoding());
-#endif
-}
-
-int
-rb_enc_symname_p(const char *name, rb_encoding *enc)
-{
-    return rb_enc_symname2_p(name, strlen(name), enc);
-}
-
-int
-rb_enc_symname2_p(const char *name, int len, rb_encoding *enc)
-{
-    const char *m = name;
-    const char *e = m + len;
-    int localid = Qfalse;
-
-    if (!m) return Qfalse;
-    switch (*m) {
-      case '\0':
-	return Qfalse;
-
-      case '$':
-	if (is_special_global_name(++m, e, enc)) return Qtrue;
-	goto id;
-
-      case '@':
-	if (*++m == '@') ++m;
-	goto id;
-
-      case '<':
-	switch (*++m) {
-	  case '<': ++m; break;
-	  case '=': if (*++m == '>') ++m; break;
-	  default: break;
-	}
-	break;
-
-      case '>':
-	switch (*++m) {
-	  case '>': case '=': ++m; break;
-	}
-	break;
-
-      case '=':
-	switch (*++m) {
-	  case '~': ++m; break;
-	  case '=': if (*++m == '=') ++m; break;
-	  default: return Qfalse;
-	}
-	break;
-
-      case '*':
-	if (*++m == '*') ++m;
-	break;
-
-      case '+': case '-':
-	if (*++m == '@') ++m;
-	break;
-
-      case '|': case '^': case '&': case '/': case '%': case '~': case '`':
-	++m;
-	break;
-
-      case '[':
-	if (*++m != ']') return Qfalse;
-	if (*++m == '=') ++m;
-	break;
-
-      case '!':
-	switch (*++m) {
-	  case '\0': return Qtrue;
-	  case '=': case '~': ++m; break;
-	  default: return Qfalse;
-	}
-	break;
-	    
-      default:
-	localid = !rb_enc_isupper(*m, enc);
-      id:
-	if (m >= e || (*m != '_' && !rb_enc_isalpha(*m, enc) && ISASCII(*m)))
-	    return Qfalse;
-#if WITH_OBJC
-	while (m < e && is_identchar(m, e, enc)) m += 1;
-#else
-	while (m < e && is_identchar(m, e, enc)) m += rb_enc_mbclen(m, e, enc);
-#endif
-	if (localid) {
-	    switch (*m) {
-	      case '!': case '?': case '=': ++m;
-	    }
-	}
-	break;
-    }
-    return *m ? Qfalse : Qtrue;
-}
-
-#if WITH_OBJC
-static inline VALUE
-rsymbol_new(const char *name, const int len, ID id)
-{
-    VALUE sym;
-
-    sym = (VALUE)orig_malloc(sizeof(struct RSymbol));
-    RSYMBOL(sym)->str = orig_malloc(len + 1);
-    RSYMBOL(sym)->klass = rb_cSymbol;
-    strcpy(RSYMBOL(sym)->str, name);
-    RSYMBOL(sym)->len = len;
-    RSYMBOL(sym)->id = id;
-    
-    return sym;
-}
-#endif
-
-ID
-rb_intern3(const char *name, long len, rb_encoding *enc)
-{
-    const char *m = name;
-    const char *e = m + len;
-    VALUE str;
-    ID id;
-    int last;
-    int mb;
-#if !WITH_OBJC
-    struct RString fake_str;
-    fake_str.basic.isa = NULL;
-    fake_str.basic.flags = T_STRING|RSTRING_NOEMBED|FL_FREEZE;
-    fake_str.basic.klass = rb_cString;
-    fake_str.as.heap.len = len;
-    fake_str.as.heap.ptr = (char *)name;
-    fake_str.as.heap.aux.capa = len;
-    str = (VALUE)&fake_str;
-    rb_enc_associate(str, enc);
-
-    if (st_lookup(global_symbols.sym_id, str, (st_data_t *)&id))
-	return id;
-#else
-    long sname = strlen(name);
-    assert(len <= sname);
-    if (sname != len) {
-	char *tmp = (char *)alloca(len + 1);
-	memcpy(tmp, name, len);
-	tmp[len] = '\0';
-	m = name = tmp;
-	e = m + len;
-    }
-    SEL name_hash = sel_registerName(name);
-    if (name_hash == sel_ignored) {
-	if (strcmp(name, "retain") == 0) {
-	    name_hash = (SEL)0x1000;
-	}
-	else if (strcmp(name, "release") == 0) {
-	    name_hash = (SEL)0x2000;
-	}
-	else {
-	    assert(1==0);
-	}
-    }
-    id = (ID)CFDictionaryGetValue((CFDictionaryRef)global_symbols.sym_id, 
-	(const void *)name_hash);
-    if (id != 0)
-	return id; 
-#endif
-
-    last = len-1;
-    id = 0;
-    switch (*m) {
-      case '$':
-	id |= ID_GLOBAL;
-	if ((mb = is_special_global_name(++m, e, enc)) != 0) {
-	    if (!--mb) {
-#if WITH_OBJC
-		enc = NULL;
-#else
-		enc = rb_ascii8bit_encoding();
-#endif
-	    }
-	    goto new_id;
-	}
-	break;
-      case '@':
-	if (m[1] == '@') {
-	    m++;
-	    id |= ID_CLASS;
-	}
-	else {
-	    id |= ID_INSTANCE;
-	}
-	m++;
-	break;
-      default:
-	if (m[0] != '_' && rb_enc_isascii((unsigned char)m[0], enc)
-	    && !rb_enc_isalnum(m[0], enc)) {
-	    /* operators */
-	    int i;
-
-	    for (i=0; op_tbl[i].token; i++) {
-		if (*op_tbl[i].name == *m &&
-		    strcmp(op_tbl[i].name, m) == 0) {
-		    id = op_tbl[i].token;
-		    goto id_register;
-		}
-	    }
-	}
-
-	if (m[last] == '=') {
-	    /* attribute assignment */
-	    id = rb_intern3(name, last, enc);
-	    if (id > tLAST_TOKEN && !is_attrset_id(id)) {
-		enc = rb_enc_get(rb_id2str(id));
-		id = rb_id_attrset(id);
-		goto id_register;
-	    }
-	    id = ID_ATTRSET;
-	}
-	else if (rb_enc_isupper(m[0], enc)) {
-	    id = ID_CONST;
-        }
-	else {
-	    id = ID_LOCAL;
-	}
-	break;
-    }
-    mb = 0;
-    if (!rb_enc_isdigit(*m, enc)) {
-	while (m <= name + last && is_identchar(m, e, enc)) {
-	    if (ISASCII(*m)) {
-		m++;
-	    }
-	    else {
-		mb = 1;
-#if WITH_OBJC
-		m += 1;
-#else
-		m += rb_enc_mbclen(m, e, enc);
-#endif
-	    }
-	}
-    }
-    if (m - name < len) id = ID_JUNK;
-#if !WITH_OBJC
-    if (enc != rb_usascii_encoding()) {
-	/*
-	 * this clause makes sense only when called from other than
-	 * rb_intern_str() taking care of code-range.
-	 */
-	if (!mb) {
-	    for (; m <= name + len; ++m) {
-		if (!ISASCII(*m)) goto mbstr;
-	    }
-	    enc = rb_usascii_encoding();
-	}
-      mbstr:;
-    }
-#endif
-  new_id:
-    id |= ++global_symbols.last_id << ID_SCOPE_SHIFT;
-  id_register:
-    str = rsymbol_new(name, len, id);
-#if WITH_OBJC
-    CFDictionarySetValue(global_symbols.sym_id, (const void *)name_hash, 
-	(const void *)id);
-    CFDictionarySetValue(global_symbols.id_str, (const void *)id,
-	(const void *)str);
-#else
-    st_add_direct(global_symbols.sym_id, (st_data_t)str, id);
-    st_add_direct(global_symbols.id_str, id, (st_data_t)str);
-#endif
-    return id;
-}
-
-ID
-rb_intern2(const char *name, long len)
-{
-#if WITH_OBJC
-    return rb_intern3(name, len, NULL);
-#else
-    return rb_intern3(name, len, rb_usascii_encoding());
-#endif
-}
-
-#undef rb_intern
-ID
-rb_intern(const char *name)
-{
-    return rb_intern2(name, strlen(name));
-}
-
-ID
-rb_intern_str(VALUE str)
-{
-    ID id;
-
-#if WITH_OBJC
-    const char *s = RSTRING_PTR(str);
-    id = rb_intern3(s, strlen(s), NULL);
-#else
-    rb_encoding *enc;
-    enc = rb_enc_get(str);
-    if (rb_enc_str_coderange(str) == ENC_CODERANGE_7BIT) {
-	enc = rb_usascii_encoding();
-    }
-    else {
-	enc = rb_enc_get(str);
-    }
-    id = rb_intern3(RSTRING_PTR(str), RSTRING_LEN(str), enc);
-    RB_GC_GUARD(str);
-#endif
-    return id;
-}
-
-VALUE
-rb_id2str(ID id)
-{
-    st_data_t data;
-
-    if (id < tLAST_TOKEN) {
-	int i = 0;
-
-	for (i=0; op_tbl[i].token; i++) {
-	    if (op_tbl[i].token == id) {
-		VALUE str = global_symbols.op_sym[i];
-		if (!str) {
-#if WITH_OBJC
-		    str = rsymbol_new(op_tbl[i].name, strlen(op_tbl[i].name), op_tbl[i].token);
-#else
-		    str = rb_usascii_str_new2(op_tbl[i].name);
-		    OBJ_FREEZE(str);
-#endif
-		    global_symbols.op_sym[i] = str;
-		}
-		return str;
-	    }
-	}
-    }
-
-#if WITH_OBJC
-    data = (VALUE)CFDictionaryGetValue(
-	(CFDictionaryRef)global_symbols.id_str,
-	(const void *)id);
-    if (data != 0)
-	return data;
-#else
-    if (st_lookup(global_symbols.id_str, id, &data)) {
-        VALUE str = (VALUE)data;
-        if (RBASIC(str)->klass == 0)
-            RBASIC(str)->klass = rb_cString;
-	return str;
-    }
-#endif
-
-    if (is_attrset_id(id)) {
-	ID id2 = (id & ~ID_SCOPE_MASK) | ID_LOCAL;
-	VALUE str;
-
-	while (!(str = rb_id2str(id2))) {
-	    if (!is_local_id(id2)) return 0;
-	    id2 = (id & ~ID_SCOPE_MASK) | ID_CONST;
-	}
-	str = rb_str_dup(str);
-	rb_str_cat(str, "=", 1);
-	rb_intern_str(str);
-#if WITH_OBJC
-	data = (VALUE)CFDictionaryGetValue(
-	    (CFDictionaryRef)global_symbols.id_str,
-	    (const void *)id);
-	if (data != 0)
-	    return data;
-#else
-	if (st_lookup(global_symbols.id_str, id, &data)) {
-            VALUE str = (VALUE)data;
-            if (RBASIC(str)->klass == 0)
-                RBASIC(str)->klass = rb_cString;
-            return str;
-        }
-#endif
-    }
-    return 0;
-}
-
-#if !WITH_OBJC
-const char *
-rb_id2name(ID id)
-{
-    VALUE str = rb_id2str(id);
-
-    if (!str) return 0;
-    return RSTRING_PTR(str);
-}
-#endif
-
-const char *
-ruby_node_name(int node)
-{
-    switch (node) {
-#include "node_name.inc"
-	default:
-	    rb_bug("unknown node (%d)", node);
-	    return 0;
-    }
-}
- 
-#if !WITH_OBJC
-static int
-symbols_i(VALUE sym, ID value, VALUE ary)
-{
-    rb_ary_push(ary, ID2SYM(value));
-    return ST_CONTINUE;
-}
-#endif
-
-/*
- *  call-seq:
- *     Symbol.all_symbols    => array
- *
- *  Returns an array of all the symbols currently in Ruby's symbol
- *  table.
- *
- *     Symbol.all_symbols.size    #=> 903
- *     Symbol.all_symbols[1,20]   #=> [:floor, :ARGV, :Binding, :symlink,
- *                                     :chown, :EOFError, :$;, :String,
- *                                     :LOCK_SH, :"setuid?", :$<,
- *                                     :default_proc, :compact, :extend,
- *                                     :Tms, :getwd, :$=, :ThreadGroup,
- *                                     :wait2, :$>]
- */
-
-VALUE
-rb_sym_all_symbols(void)
-{
-#if WITH_OBJC
-    const void **values;
-    long count;
-    VALUE ary;
-
-    ary = rb_ary_new();
-    count = CFDictionaryGetCount(global_symbols.id_str);
-    if (count == 0)
-	return ary;
-    values = alloca(sizeof(void *) * count);
-    CFDictionaryGetKeysAndValues(global_symbols.id_str, NULL, values);
-    CFArrayReplaceValues((CFMutableArrayRef)ary, CFRangeMake(0, 0), values, count);   
-#else
-    VALUE ary = rb_ary_new2(global_symbols.sym_id->num_entries);
-
-    st_foreach(global_symbols.sym_id, symbols_i, ary);
-#endif
-    return ary;
-}
-
-int
-rb_is_const_id(ID id)
-{
-    if (is_const_id(id)) return Qtrue;
-    return Qfalse;
-}
-
-int
-rb_is_class_id(ID id)
-{
-    if (is_class_id(id)) return Qtrue;
-    return Qfalse;
-}
-
-int
-rb_is_instance_id(ID id)
-{
-    if (is_instance_id(id)) return Qtrue;
-    return Qfalse;
-}
-
-int
-rb_is_local_id(ID id)
-{
-    if (is_local_id(id)) return Qtrue;
-    return Qfalse;
-}
-
-int
-rb_is_junk_id(ID id)
-{
-    if (is_junk_id(id)) return Qtrue;
-    return Qfalse;
-}
-
-#endif /* !RIPPER */
-
-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_class_nest = 0;
-    parser->parser_paren_nest = 0;
-    parser->parser_lpar_beg = 0;
-    parser->parser_in_single = 0;
-    parser->parser_in_def = 0;
-#if WITH_OBJC
-    parser->parser_in_def_named_args = 0;
-#endif
-    parser->parser_in_defined = 0;
-    parser->parser_compile_for_eval = 0;
-    parser->parser_cur_mid = 0;
-    parser->parser_tokenbuf = NULL;
-    parser->parser_tokidx = 0;
-    parser->parser_toksiz = 0;
-    parser->parser_heredoc_end = 0;
-    parser->parser_command_start = Qtrue;
-    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;
-#ifndef RIPPER
-    parser->is_ripper = 0;
-    parser->parser_eval_tree_begin = 0;
-    parser->parser_eval_tree = 0;
-#else
-    parser->is_ripper = 1;
-    parser->parser_ruby_sourcefile_string = Qnil;
-    parser->delayed = Qnil;
-
-    parser->result = Qnil;
-    parser->parsing_thread = Qnil;
-    parser->toplevel_p = Qtrue;
-#endif
-#ifdef YYMALLOC
-    parser->heap = NULL;
-#endif
-#if WITH_OBJC
-    parser->enc = rb_locale_encoding();
-#else
-    parser->enc = rb_usascii_encoding();
-#endif
-}
-
-#ifdef RIPPER
-#define parser_mark ripper_parser_mark
-#define parser_free ripper_parser_free
-#endif
-
-static void
-parser_mark(void *ptr)
-{
-#if !WITH_OBJC
-    struct parser_params *p = (struct parser_params*)ptr;
-#endif
-
-    rb_gc_mark((VALUE)p->parser_lex_strterm);
-    rb_gc_mark(p->parser_lex_input);
-    rb_gc_mark(p->parser_lex_lastline);
-    rb_gc_mark(p->parser_lex_nextline);
-#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->parser_ruby_sourcefile_string);
-    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);
-    }
-#ifndef RIPPER
-    xfree(p->parser_ruby_sourcefile);
-#endif
-    xfree(p);
-}
-
-VALUE rb_parser_get_yydebug(VALUE);
-VALUE rb_parser_set_yydebug(VALUE, VALUE);
-
-#ifndef RIPPER
-static struct parser_params *
-parser_new(void)
-{
-    struct parser_params *p;
-
-    p = ALLOC_N(struct parser_params, 1);
-    MEMZERO(p, struct parser_params, 1);
-    parser_initialize(p);
-    return p;
-}
-
-VALUE
-rb_parser_new(void)
-{
-    struct parser_params *p = parser_new();
-
-    return Data_Wrap_Struct(rb_cData, parser_mark, parser_free, p);
-}
-
-/*
- *  call-seq:
- *    ripper#end_seen?   -> Boolean
- *
- *  Return if parsed source ended by +\_\_END\_\_+.
- *  This number starts from 1.
- */
-VALUE
-rb_parser_end_seen_p(VALUE vparser)
-{
-    struct parser_params *parser;
-
-    Data_Get_Struct(vparser, struct parser_params, 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;
-
-    Data_Get_Struct(vparser, struct parser_params, parser);
-    return rb_enc_from_encoding(parser->enc);
-}
-
-/*
- *  call-seq:
- *    ripper.yydebug   -> true or false
- *
- *  Get yydebug.
- */
-VALUE
-rb_parser_get_yydebug(VALUE self)
-{
-    struct parser_params *parser;
-
-    Data_Get_Struct(self, struct parser_params, 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;
-
-    Data_Get_Struct(self, struct parser_params, parser);
-    yydebug = RTEST(flag);
-    return flag;
-}
-
-#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 (TYPE(x)) {
-      case T_STRING:
-      case T_OBJECT:
-      case T_ARRAY:
-      case T_BIGNUM:
-      case T_FLOAT:
-        return x;
-      case T_NODE:
-        rb_raise(rb_eArgError, "NODE given: %p", x);
-      default:
-        rb_raise(rb_eArgError, "wrong type of ruby object: %p (%s)",
-                 x, rb_obj_classname(x));
-    }
-    return x;
-}
-#endif
-
-#define validate(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 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;
-}
-
-static VALUE
-ripper_id2sym(ID id)
-{
-    const char *name;
-    char buf[8];
-
-    if (id <= 256) {
-        buf[0] = id;
-        buf[1] = '\0';
-        return ID2SYM(rb_intern(buf));
-    }
-    if ((name = keyword_id_to_str(id))) {
-        return ID2SYM(rb_intern(name));
-    }
-    switch (id) {
-      case tOROP:
-        name = "||";
-        break;
-      case tANDOP:
-        name = "&&";
-        break;
-      default:
-        name = rb_id2name(id);
-        if (!name) {
-            rb_bug("cannot convert ID to string: %ld", (unsigned long)id);
-        }
-        break;
-    }
-    return ID2SYM(rb_intern(name));
-}
-
-static VALUE
-ripper_intern(const char *s)
-{
-    return ID2SYM(rb_intern(s));
-}
-
-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);
-}
-
-static void
-ripper_warn0(struct parser_params *parser, const char *fmt)
-{
-    rb_funcall(parser->value, rb_intern("warn"), 1, STR_NEW2(fmt));
-}
-
-static void
-ripper_warnI(struct parser_params *parser, const char *fmt, int a)
-{
-    rb_funcall(parser->value, rb_intern("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, rb_intern("warn"), 2,
-    	       STR_NEW2(fmt), STR_NEW2(str));
-}
-
-static void
-ripper_warning0(struct parser_params *parser, const char *fmt)
-{
-    rb_funcall(parser->value, rb_intern("warning"), 1, STR_NEW2(fmt));
-}
-
-static void
-ripper_warningS(struct parser_params *parser, const char *fmt, const char *str)
-{
-    rb_funcall(parser->value, rb_intern("warning"), 2,
-               STR_NEW2(fmt), STR_NEW2(str));
-}
-
-static VALUE
-ripper_lex_get_generic(struct parser_params *parser, VALUE src)
-{
-    return rb_funcall(src, ripper_id_gets, 0);
-}
-
-static VALUE
-ripper_s_allocate(VALUE klass)
-{
-    struct parser_params *p;
-    VALUE self;
-
-    p = ALLOC_N(struct parser_params, 1);
-    MEMZERO(p, struct parser_params, 1);
-    self = Data_Wrap_Struct(klass, parser_mark, parser_free, 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, a 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;
-
-    Data_Get_Struct(self, struct parser_params, parser);
-    rb_scan_args(argc, argv, "12", &src, &fname, &lineno);
-    if (rb_obj_respond_to(src, ripper_id_gets, 0)) {
-        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)");
-    }
-    else {
-        StringValue(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;
-}
-
-extern VALUE rb_thread_pass(void);
-
-struct ripper_args {
-    struct parser_params *parser;
-    int argc;
-    VALUE *argv;
-};
-
-static VALUE
-ripper_parse0(VALUE parser_v)
-{
-    struct parser_params *parser;
-
-    Data_Get_Struct(parser_v, struct parser_params, parser);
-    parser_prepare(parser);
-    ripper_yyparse((void*)parser);
-    return parser->result;
-}
-
-static VALUE
-ripper_ensure(VALUE parser_v)
-{
-    struct parser_params *parser;
-
-    Data_Get_Struct(parser_v, struct parser_params, 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;
-
-    Data_Get_Struct(self, struct parser_params, 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;
-
-    Data_Get_Struct(self, struct parser_params, 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#lineno   -> Integer
- *
- *  Return line number of current parsing line.
- *  This number starts from 1.
- */
-static VALUE
-ripper_lineno(VALUE self)
-{
-    struct parser_params *parser;
-
-    Data_Get_Struct(self, struct parser_params, 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, "%s", RSTRING_PTR(msg));
-    }
-    return Qnil;
-}
-
-/* :nodoc: */
-static VALUE
-ripper_value(VALUE self, VALUE obj)
-{
-    return ULONG2NUM(obj);
-}
-#endif
-
-void
-Init_ripper(void)
-{
-    VALUE Ripper;
-
-    Ripper = rb_define_class("Ripper", rb_cObject);
-    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, "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);
-#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_id_gets = rb_intern("gets");
-    ripper_init_eventids1(Ripper);
-    ripper_init_eventids2(Ripper);
-    /* ensure existing in symbol table */
-    rb_intern("||");
-    rb_intern("&&");
-}
-#endif /* RIPPER */
-
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20090311/2a4e998f/attachment-0001.html>


More information about the macruby-changes mailing list